手动改变 React 上的状态,然后调用 setState

IT技术 javascript reactjs
2021-05-01 09:39:41

我正在研究 React JS 制作一个简单的待办事项列表,我的部分代码如下:

changeStatus(e, index) {
    this.state.tasks[index].status = e.target.value;
    this.setState((prevState) => ({
        tasks: prevState.tasks
    }));
}

正如 React 文档所说,我们不应该state手动更改,而是应该调用setState,因此,我在控制台上收到警告说,即使setState在手动更改后调用

我这样做是因为,对我来说,这样做比分离tasksplice在我的数组上执行 asetState使用新值调用更实用

我的方法有问题吗?您如何建议以有效且非重复的方式更新状态?

2个回答

试试这个 :

   changeStatus(e, index) {
      const tmp = { ...this.state };
      tmp.tasks[index].status = e.target.value;
      this.setState(tmp);
   }

你不应该直接改变状态,这样做从状态创建一个新对象,然后更新它并将其设置回状态

changeStatus(e, index) {
    var tasks = {...this.state.tasks}
    tasks[index].status = e.target.value;
    this.setState({tasks});
}

如果您想知道该怎么{...this.state.tasks}做,请查看此答案:

Reactjs中这种语法“{...x}”的含义是什么

但是,您也可以使用ES5Object.assign() 运算符制作状态的副本,例如

var tasks = Object.assign({}, this.state.tasks)