Я думаю, вы все вместе перезаписываете значение состояния. Вы хотите добавить к тому, что существует в состоянии задачи. Вы можете использовать оператор распространения, чтобы установить в задачу все, что уже есть, плюс новое значение.
Примерно так:
setTodos ({... todos, [key ]: value});
setTodos([...todos, [key]: value ]);
- Обратите внимание, что оператор распространения - это мелкий клон. Если у вас есть более глубокий объект (я думаю, более двух слоев), используйте что-то вроде cloneDeep из библиотеки loda sh.
Чтобы увидеть, что происходит, измените этот блок, чтобы добавить console.logs
try {
value = JSON.parse(value);
setTodos({ [key]: value });
console.log(todos);
} catch (event) {
console.log('There was an error:', error);
// Should handle the error here rather than try to do what failed again
//setTodos({ [key]: value });
}
Изменить: относительно добавленной вами ошибки.
Вы пытаетесь использовать карту для объекта. map - это функция массива.
Вместо этого вы должны преобразовать свой объект в массив, а затем обратно:
const myObjAsArr = Object.entries(todos).map(([k,v]) => {
// Do stuff with key and value
}
const backToObject = Object.fromEntries(myObjAsArr);
Измените это, чтобы установить массив (не объект):
setTodos([...todos, [key]: value ]);
Поместите журналы консоли повсюду, чтобы вы могли видеть, что происходит.