我使用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