reactjs - 如何在“全局”减速器中使用“主”状态?
问题描述
我有一个 react、redux-saga、不可变的 js 应用程序。
有了这个架构,我的 redux store 就是这样的。
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)
))
全局减速器注入
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))))
推荐阅读
- pandas - RFECV gridscore 中的数字是否等同于所选特征?
- flutter - 如何在 Flutter_linkify 上编辑 Hiperlink
- php - SQLSTATE[HY000]:一般错误:1364 字段“country_id”没有默认值
- function - 如何在 Go 中泛化函数包装?
- visual-studio-code - VSCode 扩展在 activityBar 中添加一个输入
- node.js - 使用 Jest 进行 Strapi 单元测试,失败
- javascript - 如何在 crome 浏览器的控制台上运行纯 Java 脚本文件
- java - 我无法在 android studio 上运行我的项目。每当我尝试下载模拟器时,它都会显示以下错误
- python-3.x - 您在 64 位操作系统(mac)上运行 32 位 Python,无法加载 XGBoost 库。可能的原因,Mac
- docker - 有没有办法在 gcp 中自动构建 kubeflow 管道