我在整个应用程序中使用@ reduxjs / toolkit createSlice功能。 我经常需要访问其他片的状态。一个常见的示例是“一对多关系”,其中子项通过“ byParentId”键以其各自的状态以规范化形式存储。因此,当用户使某个“父级”处于活动状态时,“子级”中的几乎每个选择器/减速器/传奇效果都需要访问“父级”状态的“活动”字段。最初,我在组合化简器时只是将“ activeParent”字段添加到操作中。后来,在更多此类情况下,我最终只使用了“全局”变量,并且每个动作的整个状态都在起作用,而不是在Combine Reducers函数中进行数据准备。
这也提高了redux-saga的性能,其中yield select(selector)
的呼叫被同步selector(global)
取代
Here @gaeron声称这种方法是一种反模式,通常可以通过以下方法解决:
从缩减器中删除该逻辑并将其移至选择器
好,可能的话。
将其他信息传递给操作;
有时候很好,但是经常会带来不必要的性能损失。 要将其他信息传递给操作,应使用useSelector将其检索到可能不需要的其他组件中,请阅读:更多重绘。
让视图代码执行两项操作。
再次,很好,但并非总是如此。它需要将动作序列放在多个组件中,而不是简单的逻辑, 当一项行动导致另一项行动时。
一个提到的问题:
通过使用选择器而不是直接访问“外国”状态可以轻松避免异径管彼此耦合成彼此的状态形状,这会使状态结构的任何重构或更改变得复杂。
。
这种方法成为反模式的确有理由吗?
答案 0 :(得分:0)
将 enter 根状态置于一个动作中绝对是一种反模式,应该避免。
您可能有时想要 put additional data from the state into specific actions if the reducer logic needs it。
除此之外,我需要查看有关您要执行的操作以及代码看起来像什么的详细信息,以提供更多建议。