我使用React編寫了一個小型待辦事項應用程序,用戶可以在其中添加和刪除項目。避免`setTimeout`'hack'確保狀態同步
作爲獎勵功能,該列表被保存爲localStorage
,因爲它由用戶進行了變更,並在組件的初始裝載中使用。
在addTodo
和removeTodo
方法兩者的圖案是這樣的:
- 設置通過添加或移除
this.state.todos
- 複製的狀態的項
localStorage
對於新的狀態例如,這裏是removeTodo
方法:
removeTodo(indexOfItemToRemove) {
const todosCopy = this.state.todos.slice();
todosCopy.splice(indexOfItemToRemove, 1);
this.setState({
todos: todosCopy
});
this.updateLocalStorageWithState();
}
這是我目前在做什麼,以節省this.state.todos
到localStorage
updateLocalStorageWithState() {
setTimeout(() => {
localStorage.setItem('localStorageTodos', JSON.stringify(this.state.todos));
}, 1);
}
我發現,不使用setTimeout
,在localStorage
卻總是落後1步,用什麼樣的用戶可能會覺得作爲列表的過時版本。
這感覺就像一個黑客。我怎樣才能整合一種做同樣的事情,而不必使用setTimeout
黑客?
'this.setState()'怎麼辦?有什麼'異步'? – Arvind