2016-03-15 166 views
0

我有2个减速器,我使用并组合它们。在第一个reducer中,我有一些可以获得所有初始数据的东西(这与第二个reducer相关)。如何在2个联合减速器之间共享状态?

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

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

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

然后我结合这两个reducer,我想从他们两个访问“数据”。 (或将数据作为initialState传递给第二个reducer)

谢谢!

+0

你能解释一下你的用例吗?通常情况下,我会说这是一个迹象,表明你在减速器中有逻辑,而不属于那里。如果您的状态依赖于其他状态,则它可能属于容器组件。 –

+0

其中一个减速器刚刚发生拉动初始数据 - 你可以说它是某种“父”减速器 - 但最后我将它们结合起来。 – David

回答

2

减速器应该返回一个普通物体,并且没有副作用。如果你想在2个不同的action.type情况下可用相同的状态,那么他们要么需要在相同的功能,或父功能需要将状态传递给不同的减速功能,像这样:

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),您只有一个对象,并且此对象的顶级键是顶级缩减器函数的名称。

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

+0

我最终注入每个reducer与相关的document.data.X - 但你的答案是非常好的,生病可能使用它的道路 - 所以谢谢! – David

相关问题