1

我有 2 个减速器,我使用它们并将它们组合起来。在第一个 reducer 中,我有一些东西可以获取所有初始数据(这也与第二个 reducer 有关)。

如何使用从第一个减速器初始化/设置到第二个减速器的状态下的数据?

function reducer1(state = initialState, action = '') {
    switch (action.type) {
        case constants.INITIAL_DATA:

            returnstate.set('data', fromJS(document.data));

            ....

然后我结合这两个减速器,我想从它们访问“数据”(或将数据作为初始状态传递给第二个减速器)。

4

1 回答 1

3

reducer 应该返回一个普通的对象并且没有副作用。如果您希望在 2 种不同action.type情况下使用相同的状态,那么它们要么需要在同一个函数中,要么父函数需要将状态传递给不同的 reducer 函数,如下所示:

function parentReducer(state = {}, action = '') {
  switch (action.type) {
    case CASE_ONE:
      return childReducer1(state, action)
    case CASE_TWO:
      return childReducer2(state, action)
    default:
      return state
  }
}

但这带来了一个重要的设计点:每个(顶级)reducer 代表 Redux 状态树的一个不同分支,并且您可能总是可以以不需要树的不同部分的方式设计数据存储共享。在 Redux(查看 DevTools)中,你有一个对象,这个对象的顶级键是你的顶级 reducer 函数的名称。

基本上,如果您认为需要在减速器中设置不同的状态,以便其他减速器可以使用它,这表明需要重新考虑商店的设计。

于 2016-03-16T22:38:54.263 回答