Обновлять коллекцию при обновлении сущности из нее в Redux - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть список детей (редуктор) и список семей (редуктор). Список семей содержит массив потомков .

Как обновить ребенка в массиве детей семьи при обновлении ребенка из списка children с помощью Redux?

Это мои дети случай обновления редуктора:

export function children(state = [], action) {
    // ...

    case types.UPDATE_CHILD: {
        const childIndex = state.findIndex(child => child.id === action.id);
        state[childIndex] = action.updatedChild;
        return state;
    }

    // ...
}

1 Ответ

1 голос
/ 15 апреля 2020

Когда запускается действие избыточности, по умолчанию оно проходит через все редукторы.

В общей архитектуре редуктора мы используем что-то вроде синтаксиса {switch}, и если редуктор не имеет ответа {case } к действию действие будет go через {default} параметр в редукторе.


 const actionA = payload => (dispatch, getState) => dispatch({ type: 'a', payload })

 const reducerA = (state = {}, action) => {
  switch (action.type) {
    case 'a':
        // action will be reduced here
        return action.payload
    default:
        return state;
  }
}

 const reducerB = (state = {}, action) => {
  switch (action.type) {
    case 'b':
        return action.payload
    default:
        // action will be reduced here
        return state;
  }
}

Поэтому просто добавьте регистр {types.UPDATE_CHILD} в редуктор семейства.


const reducerB = (state = {}, action) => {
   switch (action.type) {
     case 'b':
         return action.payload
     case 'a':
         // now action will be reduced here
         return action.payload
     default:
         return state;
   }
 }

Еще одна вещь в вашем редукторе: вы манипулируете состоянием непосредственно на редукторе, а не на возврате, измените его на -


      case types.UPDATE_CHILD: {
       return state.filter(child => child.id === action.id ? action.updatedChild : child);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...