如何在“全局” reduce还原器中使用“ home”状态?

时间:2019-03-18 07:43:50

标签: reactjs redux react-redux redux-saga immutable.js

我有一个React Redux传奇的不可变js应用。

使用这种架构,我的redux存储就是这样。

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

问题是,当我想更新home contents时,我正在使用连接到家庭的减速器。但是内部家用减速器notifications不可用。 因为notificationsglobal内部。

与这种方法相反的是使用global reducer,通知在全局状态下可用。但是这次我无法访问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)
  ))

Global Reducer注射

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

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

如何使用不同的减速器状态?对于此示例,我想访问全局通知并更新主页内容。

1 个答案:

答案 0 :(得分:0)

我不知道我可以为不同的reducer使用相同的常量。

基本上,我将另一个减速器(家用减速器)连接到相同的常数。

下面是我的代码: 这是用于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 reducerCONTENT_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))))