从切片访问全局状态

时间:2020-08-29 13:44:25

标签: reactjs redux redux-saga redux-toolkit

我在整个应用程序中使用@ reduxjs / toolkit createSlice功能。 我经常需要访问其他片的状态。一个常见的示例是“一对多关系”,其中子项通过“ byParentId”键以其各自的状态以规范化形式存储。因此,当用户使某个“父级”处于活动状态时,“子级”中的几乎每个选择器/减速器/传奇效果都需要访问“父级”状态的“活动”字段。最初,我在组合化简器时只是将“ activeParent”字段添加到操作中。后来,在更多此类情况下,我最终只使用了“全局”变量,并且每个动作的整个状态都在起作用,而不是在Combine Reducers函数中进行数据准备。

这也提高了redux-saga的性能,其中yield select(selector)的呼叫被同步selector(global)取代

Here @gaeron声称这种方法是一种反模式,通常可以通过以下方法解决:

从缩减器中删除该逻辑并将其移至选择器

好,可能的话。

将其他信息传递给操作;

有时候很好,但是经常会带来不必要的性能损失。 要将其他信息传递给操作,应使用useSelector将其检索到可能不需要的其他组件中,请阅读:更多重绘。

让视图代码执行两项操作。

再次,很好,但并非总是如此。它需要将动作序列放在多个组件中,而不是简单的逻辑, 当一项行动导致另一项行动时。

一个提到的问题:

异径管彼此耦合成彼此的状态形状,这会使状态结构的任何重构或更改变得复杂。

通过使用选择器而不是直接访问“外国”状态可以轻松避免

这种方法成为反模式的确有理由吗?

1 个答案:

答案 0 :(得分:0)

enter 根状态置于一个动作中绝对是一种反模式,应该避免。

可能有时想要 put additional data from the state into specific actions if the reducer logic needs it

除此之外,我需要查看有关您要执行的操作以及代码看起来像什么的详细信息,以提供更多建议。