一般我们会把 Controller
(控制器)里面的数据经过处理给到 View
(视图)层做显现, 这种简单的赋值方式如下
this.setSate({toList: response.data})
Vue 的实现如下
this.todoList = response.data;
比如这是后台传递给我们的数据,我们想要更改数组对象的其中一项 `name` 属性值该如何实现呢?
state = {// 类似于 Vue 里面的 data()
todoList: [
{
img: "xxx",
name: "小飞",
},
{
img: "xxx",
name: "小候",
},
]
};
我们先来看一下在 vue 中如何实现
this.todoList[0].name = "Jony";
// 或者
this.$set(this.todoList[0],"name","Jony");
哇~ 其实比较简单,那么在 React 中如何实现呢?
想象中是这样的 …
this.setState({todoList[0].name:"Jony"
})
// 这样报错了,立马想到另一种方式
let obj = {
img:"xxx",
name:"Jony"
}
this.setState({todoList[0]:obj
})
都是不行的,我们的编辑器和浏览器都在报错,告诉我们不能这么写
那么怎么来实现呢
// 三目运算符 `key == 0` 是我写死的
// 如果是点击传入的话可以是 `key == index(下标)`
const todoList = [...this.state.todoList]; // 浅拷贝一下
this.setState({todoList: todoList.map((item,key)=>key == 0?{...item,name: "Jony"}:item)
});
这是官网针对 setState 的描述