2017-06-16 110 views
0

我想問是否有更好的方法來更新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

回答

1

您正在使用一個額外的步驟,你不需要。直接設置值到克隆的對象和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