Я написал небольшое приложение todo с использованием React, в котором пользователь может добавлять и удалять элементы в свой список.Избегайте `setTimeout` 'взломать', чтобы убедиться, что состояние находится в синхронизации
В качестве бонусной функции список сохраняется в 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
всегда был один шаг позади, используя то, что пользователь может воспринимать как устаревшую версию списка ,
Это похоже на хак. Как я могу включить способ сделать то же самое, не используя ручку setTimeout
?
Как насчет 'this.setState()'? Есть что-то «асинк»? – Arvind