react中的可变状态更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react中的可变状态更新相关的知识,希望对你有一定的参考价值。
例如,我们有一个这样定义的状态,它有一些待办事项,如果要完成,我们想更改该待办事项的完成状态
this.state = {
// store an array of todo objects
todos: [
{ task: 'do the dishes', done: false, id: 1 },
{ task: 'vacuum the floor', done: true, id: 2 }
]
};
为此,我们可以取消此操作。
const theTodo = this.state.todos.find(t => t.id === id);
theTodo.done = true; // NOOOOO
this.setState({
todos: this.state.todos
});
}
但是我有点困惑,数组上的find方法将向我们返回与其内部条件匹配的元素,然后将其存储在另一个变量中,然后进行访问以将其更改为true。但是,我们仍然没有更改原始状态值,因为这是一个副本。
然后我们怎么可以使用它来保存它?
this.setState({
todos: this.state.todos // bad
});
答案
仅spread一切
另一答案
您实际上没有更改任何值。您需要创建一个待修改的待办事项数组,并选择要完成的一组任务,然后以此来设置整个批次的状态。我建议这样使用.map()
:
以上是关于react中的可变状态更新的主要内容,如果未能解决你的问题,请参考以下文章
我想以不可变的方式更新状态对象,以便react和redux正常工作?
在 React/Redux reducer 中,如何以不可变的方式更新嵌套数组中的字符串?