我正在使用Redux on react-native与redux和react-redux。我使用combinereducers()来组合两个reducer:
const reducers = combineReducers({
sessiontype,
userdata
})
现在我订阅了Reducer的一些变化:
store.subscribe((state, previousState) => {
//Do something
});
我如何仅订阅我的userdata reducer?因为当我更改sessiontype reducer的状态时,我需要更改userdata reducer的状态(并且我在store.subscribe()中创建一个无限循环,因为检测到整个reducer已修改....(对不起,我的英文不好)
答案 0 :(得分:2)
Redux的概念是,您只有一个state
和一个reducer
。您有单独的Reducer的想法只是combineReducers()
引入的实现细节 - 它允许您在部分中考虑您的reducer,但对于您的应用程序,只有一个reducer
。查看this GitHub thread上的讨论。
mapStateToProps
包中的react-redux
函数允许您选择组件reducer
可以访问的部分。这可以帮助您解决问题。当有sessiontype
访问权限的组件更新reducer
时,您可以使用相同的组件更新userdata
。为此,您只需dispatch
两个单独的store
操作。另外,请记住,subscribe
实际上并不允许您访问store
- 它只是让您知道某些内容已发生变化。在subscribe
函数中,您需要调用getState()
来实际读取数据。阅读更多here。
尝试这样的事情:
store.subscribe((state, prevState) => {
// run a check of conditions for an action being dispatched
// if you don't specify conditions, you'll end up in an
// infinite loop
if (stateHasFieldOrValue) {
// dispatch update to sessiontype
store.dispatch(updateSessionType(payload));
// dispatch update to userdata
store.dispatch(updateUserData(payload));
}
});