Метод update
, предоставляемый immutability-helper
, принимает второй ключ параметра как index
объекта, который необходимо обновить в массиве.
В вашем случае он не работает или не обновляет следующий объект, потому что идентификаторы объектов определены, начиная с 1
. В идеале перед обновлением вы должны найти индекс объекта, который необходимо обновить, а затем использовать тот же индекс для обновления объекта в массиве todo
s.
Итак, я создал утилиту, чтобы узнать необходимо обновить индекс объекта, а затем вызвать метод update
export const todolist = [
{ id :1, todo:"hello team"},
{ id :2, todo:"hello team 2"}
]
const updateObj = (list, id, value) => {
let index = list.findIndex(todo => todo.id === id)
if(index === -1) return list;
let updatedList = update(list, {
[index]: {
todo: {$set: value}
}
})
return updatedList;
}
console.log(updateObj(todolist, 2, "updated value"))
console.log(updateObj(todolist, 3, "updated value"))
В вашем примере замените это ниже на EDIT_TODO
case и используйте указанную выше updateObj
утилиту
case EDIT_TODO:
console.log('edit todo called')
console.log(payload.todo.id)
return updateObj(state, payload.todo.id, payload.todo.todo);
Вот ссылка на созданный мной пример проекта. Хотя в нем нет реализации редукторов, но затем обновление объекта работает в соответствии с вашими требованиями с использованием метода immutability-helper
s update
.
Надеюсь, это поможет.