从另一个访问一个reducer的状态 - Redux

时间:2018-04-26 13:22:10

标签: redux

我使用combineReducers()

组合了两个缩减器
  1. UI Reducer有一个'isLoginOpen'键(true / false) - 如果为true,则会出现登录模式。
  2. Auth Reducer有'isAuthenticated'键 - (true / false)如果用户已登录则说明
  3. 我还有一个名为OpenLoginModal()的动作创建者,它会使UI缩减器生成“isLoginOpen”#39;成为现实。

    我只想在'isAuthenticated'为false时允许此行为。 I.E,我只允许在用户未登录时显示登录模式。

    问题是:'isAuthenticated'位于不同的reducer中,我不想将其复制到UI reducer。

    我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

减速者应该关注更新状态。

您应该使用选择器来计算应用程序的状态,包括允许哪些操作。

在您的情况下,调用动作创建者的代码(或者如果使用thunk则为动作创建者本身)可以从商店中选择两个值并决定要做什么。

答案 1 :(得分:1)

根据Redux FAQ entry on sharing state between reducers

  

许多用户后来想尝试在两个reducer之间共享数据,但发现combineReducers不允许他们这样做。有几种方法可以使用:

     
      
  • 如果reducer需要知道来自另一个状态切片的数据,则可能需要重新组织状态树形状,以便单个reducer处理更多数据。

  •   
  • 您可能需要编写一些自定义函数来处理其中一些操作。这可能需要将combineReducers替换为您自己的顶级reducer功能。您还可以使用reduce-reducers等实用程序来运行combineReducers来处理大多数操作,还可以为跨越状态切片的特定操作运行更专业的reducer。

  •   
  • 异步动作创建者(如redux-thunk)可以通过getState()访问整个状态。操作创建者可以从状态中检索其他数据并将其放入操作中,以便每个reducer都有足够的信息来更新自己的状态切片。
  •   

根据您的使用案例,我建议编写一个检查state.auth.isAuthenticated的thunk行动创建者,并且只有在行动失败的情况下才会发送行动。