从一个减速器访问另一个减速器的状态-Redux

从一个减速器访问另一个减速器的状态-Redux,redux,Redux,我有两个使用组合减速机组合的减速机 UI Reducer具有“isLoginOpen”键true/false-如果为true,则会出现登录模式。 Auth Reducer具有“isAuthenticated”键-true/false,表示用户是否登录 我还有一个名为OpenLoginModel的操作创建者,它使UI reducer使“isLoginOpen”变为真 我只想在“isAuthenticated”为false时允许此行为。也就是说,我只允许在用户未登录时显示登录模式 问题是:“isAu

我有两个使用组合减速机组合的减速机

UI Reducer具有“isLoginOpen”键true/false-如果为true,则会出现登录模式。 Auth Reducer具有“isAuthenticated”键-true/false,表示用户是否登录 我还有一个名为OpenLoginModel的操作创建者,它使UI reducer使“isLoginOpen”变为真

我只想在“isAuthenticated”为false时允许此行为。也就是说,我只允许在用户未登录时显示登录模式

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


如何解决此问题?

还原程序应该关注状态的更新

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

在您的情况下,调用action creator或action creator本身(如果使用thunk)的代码可以从存储中选择这两个值,并决定要执行的操作。

根据:

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

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

您可能需要编写一些自定义函数来处理这些操作。这可能需要用您自己的顶级减速器功能更换组合减速器。您还可以使用诸如reduce reducer之类的实用程序来运行combinereducer来处理大多数操作,但也可以为跨状态切片的特定操作运行更专门的reducer

异步操作创建者(如redux thunk)可以通过getState访问整个状态。动作创建者可以从状态中检索附加数据并将其放入动作中,以便每个reducer都有足够的信息来更新自己的状态片。
考虑到您的用例,我建议编写一个thunk action creator,检查state.auth.isAuthenticated,并且仅在错误的情况下发送操作。

您可以在isAuth状态下执行操作,然后在reducer中使用它。您也可以在UI reducer中有一个本地isAuth,当实际isAuth有值时会触发。如果您不介意重新编码您的reducer,您可以尝试在仍然使用CombineReducer的情况下访问其他reducer的状态。可能重复感谢您的快速回答。我的action creator是一个简单的函数,它返回一个action对象类型payload。所以,如果用户经过身份验证,我不希望它发送任何内容。它应该返回什么?无效的