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正常工作?

在Android单向数据流中更新不可变视图状态值

通过 React 中的输入元素更新对象中的嵌套状态

在 React/Redux reducer 中,如何以不可变的方式更新嵌套数组中的字符串?

React-Native + Redux + ImmutableJS内存泄漏

动作调度不更新 Redux/React 中的状态