我怎样才能在“全球”减速机中使用“家”状态?

问题描述 投票:0回答:1

我有一个反应,redux-saga,不可变的js应用程序。

有了这个架构,我的redux商店就是这样的。

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

问题是,当我想更新home contents我正在使用附加到家庭的减速机。但在家里减速机notifications不可用。因为notificationsglobal里面。

与此方法相反的是使用global reducer,通知可在全球状态下获得。但这次我无法访问home > contents

我的代码在下面..这是附加到全局的reducer。

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));

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

reactjs redux react-redux redux-saga immutable.js
1个回答
0
投票

我不知道我可以为不同的减速器使用相同的常数。

基本上我把另一个减速器,家用减速器连接到同一个常数。

下面是我的代码:这是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))))
© www.soinside.com 2019 - 2024. All rights reserved.