如何更新react.js中的状态?

问题描述:

我想问是否有更好的方法来更新react.js中的状态。如何更新react.js中的状态?

我在下面写了这段代码,但只是更新状态需要很多步骤,我不知道我是否以正确的方式做。

有什么建议吗?

immutable.js怎么样?我知道它的名字,但我从来没有使用它,并且不太了解它。

代码

toggleTodoStatus(todoId) { 

    const todosListForUpdate = [...this.state.todos]; 
    const indexForUpdate = this.state.todos.findIndex((todo) => { 
     return todo.id === todoId; 
    }); 

    const todoForUpdate = todosListForUpdate[indexForUpdate]; 
    todoForUpdate.isDone = !todoForUpdate.isDone; 

    this.setState({ 
     todos: [...todosListForUpdate.slice(0, indexForUpdate), todoForUpdate, ...todosListForUpdate.slice(indexForUpdate + 1)] 
    }) 

} 
+2

'常量newTodos = this.state.todos.map(T => t.id === todoId?{...吨,isDone :!(t.isDone}:t);'(截至今天 - 由于对象传播需要'stage-3') – zerkms

您正在使用一个额外的步骤,你不需要。直接设置值到克隆的对象和restting回状态将工作

toggleTodoStatus(todoId) { 

    const todosListForUpdate = [...this.state.todos]; 
    const indexForUpdate = this.state.todos.findIndex((todo) => { 
     return todo.id === todoId; 
    }); 

    todosListForUpdate[indexForUpdate].isDone = !todosListForUpdate[indexForUpdate].isDone; 

    this.setState({ 
     todos: todosListForUpdate 
    }) 

} 
+0

哦,没错!谢谢!! – hytm

+1

除非'todosListForUpdate [indexForUpdate]'没有被克隆。 – zerkms