Как обновить состояние редукса с помощью помощника неизменяемости? - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь обновить свою форму из-за редукса. Я пользуюсь с помощью помощника по исцелению. Мой редуктор:

case UPDATE_TODO:
console.log("reducer todo",action.toDo,state)
return update(state, { $set: [action.toDo] })

Но вместо того, чтобы заменить конкретный объект, он заменяет целый массив на один. Мое государство это:

[
{_id: "5b3d2696e099830f249dddfd", title: "hello", description: "hello", reminder: "2018-07-05T01:27", date: "1530734230965", …}
{_id: "5b3d2696e099830f249dddxe", title: "hello", description: "hello", reminder: "2018-07-05T01:27", date: "1530734230965", …}
]

и после обновления должно быть так:

[
{_id: "5b3d2696e099830f249dddfd", title: "hello", description: "hello", reminder: "2018-07-05T01:27", date: "1530734230965", …}
{_id: "5b3d2696e099830f249dddxe", title: "hello1", description: "hello", reminder: "2018-07-05T01:27", date: "1530734230965", …}
]

но вместо этого он дает результат:

[
{_id: "5b3d2696e099830f249dddxe", title: "hello1", description: "hello", reminder: "2018-07-05T01:27", date: "1530734230965", …}
]

1 Ответ

0 голосов
/ 30 октября 2018

Ваш код не нацелен на конкретную задачу, которую вы хотите обновить в состоянии, поэтому он заменяет все состояние. Это можно сделать двумя способами:

1) Найдите индекс элемента todo, который вы хотите обновить, используя метод Array.findIndex, прежде чем использовать метод $ set.

const todoIndex = state.findIndex(todo => todo.id === action.toDo.id)
const newState = update(state, {[todoIndex]: {$set: action.todDo }})

2) Найдите индекс элемента задачи, который вы хотите, как (1) выше, и затем используйте метод $ splice.

const todoIndex = state.findIndex(todo => todo.id === action.toDo.id)
const newState = update(state, {$splice: [[todoIndex,1,action.todDo]]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...