我有一个反应,redux-saga,不可变的js应用程序。
有了这个架构,我的redux商店就是这样的。
global: {
notifications:{...}
...
},
home: {
...contents
}
问题是,当我想更新home contents
我正在使用附加到家庭的减速机。但在家里减速机notifications
不可用。因为notifications
在global
里面。
与此方法相反的是使用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));
我如何使用不同的减速器状态?对于此示例,我想访问全局通知并更新主页内容。
我不知道我可以为不同的减速器使用相同的常数。
基本上我把另一个减速器,家用减速器连接到同一个常数。
下面是我的代码:这是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))))