我有一个React Redux传奇的不可变js应用。
使用这种架构,我的redux存储就是这样。
global: {
notifications:{...}
...
},
home: {
...contents
}
问题是,当我想更新home contents
时,我正在使用连接到家庭的减速器。但是内部家用减速器notifications
不可用。
因为notifications
在global
内部。
与这种方法相反的是使用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));
如何使用不同的减速器状态?对于此示例,我想访问全局通知并更新主页内容。
答案 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 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))))