我使用combineReducers()
'isLoginOpen'
键(true / false) - 如果为true,则会出现登录模式。'isAuthenticated'
键 - (true / false)如果用户已登录则说明我还有一个名为OpenLoginModal()
的动作创建者,它会使UI缩减器生成“isLoginOpen”#39;成为现实。
我只想在'isAuthenticated'
为false时允许此行为。 I.E,我只允许在用户未登录时显示登录模式。
问题是:'isAuthenticated'
位于不同的reducer中,我不想将其复制到UI reducer。
我该如何解决这个问题?
答案 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行动创建者,并且只有在行动失败的情况下才会发送行动。