我學習陣營JS讓我的代碼一個簡單的待辦事項列表和部分如下:變異上反應狀態手動,然後調用的setState
changeStatus(e, index) {
this.state.tasks[index].status = e.target.value;
this.setState((prevState) => ({
tasks: prevState.tasks
}));
}
由於陣營文檔中說,我們不應該改變state
我們應該調用setState
來代替,因此,我在控制檯上收到一條警告,說在手動更改後甚至調用setState
。
我這樣做是因爲,對我來說,是比較實用這樣做比分離task
,我陣列上做了splice
,並調用setState
用新值。
我的方法有問題嗎?您如何建議以有效且不重複的方式更新狀態?
[該陣營文檔概述爲什麼這是一個壞主意:(HTTPS://facebook.github .io/react/docs/react-component.html#state)「不要直接改變this.state,因爲調用setState()之後可能會替換你所做的變異**」。換句話說,如果您直接改變狀態,則不能保證您的更改實際上會持續存在。 –
當我來自Vue時,那不是我的擔憂。謝謝! – juniorgarcia
是的,Vue一般似乎設計時考慮到了突變(這就是爲什麼很多人喜歡React,即使這不是我個人的偏好)。你必須在React中使用'setState'的原因是它允許優化 - 例如如果連續快速調用兩次'setState',它們可能會合併爲一次批量更新。再次引用文檔:「將setState'視爲請求而不是立即更新組件的命令。」 –