如何订阅()到Redux上的combineReducer?

时间:2017-10-23 14:24:44

标签: react-native redux react-redux-form

我正在使用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已修改....(对不起,我的英文不好)

1 个答案:

答案 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));
  }
});