Как я могу использовать «домашнее» состояние в «глобальном» редукторе? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть приложение Response, Redux-Saga, неизменяемый JS.

С этой архитектурой мой магазин редуксов выглядит следующим образом.

global: {
   notifications:{...}
   ...
},
home: {
   ...contents
}

Проблема в том, когда я хочу обновить home contents Я использую редуктор, подключенный к дому. Но внутри дома редуктор notifications недоступен. Потому что notifications внутри global.

Как раз в противоположность этому подходу используется редуктор global, уведомления доступны в глобальном состоянии. Но на этот раз я не могу получить доступ к home > contents

Мой код ниже .. это редуктор, прикрепленный к глобальному.

case CONTENT_ADD_SUCCESS:
  return state
    .set('loading', false)
    .update('notifications', arr => arr.push(
      fromJS(
      {
        show: true,
        type: 'success',
        message: action.response.message,
      }
    )
   .setIn(['home', 'contents'], action.response.newContent)
  ))

Глобальная инъекция редуктора

const withReducer = injectReducer({ key: 'global', reducer });
const withSaga = injectSaga({ key: 'global', saga });

export default compose(
  withReducer,
  withSaga,
  withConnect,
)(withStyles(mainLayoutStyle)(MainLayout));

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

1 Ответ

0 голосов
/ 18 марта 2019

Я не знал, что могу использовать одну и ту же константу для разных редукторов.

По сути, я подключил другой редуктор, домашний редуктор к той же константе.

Ниже приведен мой код: это дляlayout reducer. управление уведомлениями с помощью CONTENT_ADD_SUCCESS

case CONTENT_ADD_SUCCESS:
        return state
            .set('loading', false)
            .update('notifications', arr => arr.push(
                fromJS(
                    {
                        key: CONTENT_ADD_SUCCESS_N_ID,
                        show: true,
                        type: 'success',
                        message: action.response.message,
                    }
                )
            ))

Это для home reducer управления домашним контентом с помощью CONTENT_ADD_SUCCESS

case CONTENT_ADD_SUCCESS:
        console.log('HOME REDUCER :: CONTENT_ADD_SUCCESS', state);
        return state
          .update('contents', arr => arr.unshift(fromJS(JSON.parse(action.response.newContent))))
...