Обычное
todo приложение. Есть функция, которая при клике ставит метку
completedэлементу из списка:
const toggleHandler = (id) => {
setTodos(prevState => {
return prevState.map(todo => { // проблема тут
if (todo.id === id) todo.completed = !todo.completed
return todo
})
})
}
Проблема в том, что в строгом режиме
setTodos вызывается дважды, проставляя сперва
completed: true и затем
completed: false и с виду выглядит будто ничего не происходит.
В качестве решения можно отказаться от колбэка и обновлять state через spread.
Но как исправить эту проблему используя колбэк с предыдущим состоянием и
не выключая строгий режим?