2017-02-18 3 views
1

В настоящее время состояние, которое усложняется, мне интересно, не ошибаюсь ли я, см. Ниже пример редуктора, который я использую.Проект вложенного состояния Redux

case RECEIVE_DEPARTMENT_DAYDATA: 
    return { 
     ...state, 
     departments: { 
      ...state.departments, 
      [action.payload.targetDepartment]: { 
       ...state.departments[action.payload.targetDepartment], 
       dayData: { 
        ...state.departments[action.payload.targetDepartment].dayData, 
        [action.payload.day]: { 
         ...state.departments[action.payload.targetDepartment].dayData[action.payload.day], 
         [action.payload.targetField]: { 
          ...action.payload.data, 
          isFetching: false, 
          receivedAt: new Date(), 
          didInvaldiate: false, 
          didCall: true 
         } 
        } 
       } 
      } 
     } 
    }; 

Лучше ли переместить деньДата к собственному редуктору или не имеет значения?

+0

На мой взгляд, для этого понадобится большой рефакторинг. Никто не сможет прочитать и понять все это за разумное время. Когда вы в конечном итоге распространяете огромное количество свойств из исходного состояния, это хороший признак того, что вам также может потребоваться изменить структуру данных. –

+0

@ BalázsÉdes это то, о чем я думал. Я такой новичок, чтобы поддерживать дизайн, поэтому любая помощь приветствуется. В основном у меня есть 'dayData' per' department'. У этого 'dayData' также есть ключи. – NealVDV

+0

Есть ли способ сделать ваши данные менее «вложенными»? Обрабатывать сущности в отдельных коллекциях и ссылаться на них с помощью идентификатора или чего-то еще? Возможно, проверьте [normalizr] (https://www.npmjs.com/package/normalizr) –

ответ

4

Моим советом было бы нормализовать ваше состояние в плоское состояние.

Вы должны взглянуть на: https://github.com/paularmstrong/normalizr и посмотреть видео Дэна Абрамовым на Умник о нормализации Redux состояния: https://egghead.io/lessons/javascript-redux-normalizing-api-responses-with-normalizr

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

Недавно твиттер выпустил свой мобильный сайт с среагировать и Redux и там была статья рассекает их состояние, которое также может быть интересно читать: https://medium.com/statuscode/dissecting-twitters-redux-store-d7280b62c6b1#.2e55tu6wb

+0

Не знал, что у него была учебная серия! Вы проверите это, спасибо! – NealVDV

1

Вашего примера неизменного вложенного обновления данных правильно. Тем не менее, @Canastro также правильна - это хороший кандидат на нормализацию.

Я рекомендую вам прочитать http://redux.js.org/docs/faq/OrganizingState.html#organizing-state-nested-data и http://redux.js.org/docs/recipes/StructuringReducers.html в документации Redux, а также некоторые из статей в Redux Techniques#Normalization разделе моего React/Redux links list.

Смежные вопросы