Разрушающие действия в Nested Redux Reducer - PullRequest
1 голос
/ 06 июля 2019

Я отправляю действие, которое выглядит следующим образом:

{ type: "TOGGLE_FARA", fara: true, id: "5d20d019cf42731c8f706db1" }

«Идентификатор» просто используется для идентификации правильного пользователя.Действие предназначено для изменения свойства «enabled» моего состояния «fara».Раздел fara моего магазина выглядит так:

{
   fara: {
     enabled: false, // This need to be flipped...
     names: []
   },
   senators: {
      enabled: false,
      names: []
   },
   senateCandidates: {
      enabled: false,
      names: []
   }
}

Однако я не уверен, как структурировать мой редуктор.Я только хочу изменить свойство "enabled".Я пробовал несколько разных способов:

export default (state = DEFAULT_STATE, action) => {
    switch (action.type) {
      case "INITIALIZE_SETTINGS":
        return {
          fara: action.fara,
          senators: action.senators,
          senateCandidates: action.senateCandidates,
          emails: action.emails
        }
      case "TOGGLE_FARA":
        return {
          ...state,
          // fara['enabled']: action.fara <–– This won't compile...
          // 'fara.enabled' : action.fara <–––This just gives me a key name with the string 'fara.enabled' 
        }
      default:
        return state;
      }

Я собирался сделать что-то подобное, но это напрямую изменяет состояние, которое вы не должны делать (мое расширение для избыточного инструмента говорит, что состояниято же самое, что не идеально).Есть мысли?

export default (state = DEFAULT_STATE, action) => {
    switch (action.type) {
      case "INITIALIZE_SETTINGS":
        return {
          fara: action.fara,
          senators: action.senators,
          senateCandidates: action.senateCandidates,
          emails: action.emails
        }
      case "TOGGLE_FARA":
        state.fara.enabled = action.fara;
        return {
           ...state
        };
      default:
        return state;
      }

1 Ответ

5 голосов
/ 06 июля 2019

Это будет работать:

return {
          ...state,
          fara: { ...state.fara, enabled: action.fara }
        }

и, по-видимому, даже в документации Redux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...