【发布时间】:2020-12-18 04:55:46
【问题描述】:
我正在为整个应用程序使用@reduxjs/toolkit createSlice 功能。 我经常需要访问其他切片的状态。一个常见的例子是“一对多关系”,其中孩子在各自状态下通过“byParentId”键以标准化形式存储。因此,当用户使某些“父”处于活动状态时,“子”中的几乎每个选择器/减速器/传奇效果都需要访问“父”状态“活动”字段。最初,我只是在组合减速器的同时将“activeParent”字段添加到操作中。后来,在更多这样的情况下,我最终只使用“全局”变量来处理每个动作的整个状态,而不是在 combine reducers 函数中制作数据准备。
这也提高了 redux-saga 中的性能,其中 yield select(selector) 调用替换为同步 selector(global)
Here@gaeron 声称这种方法是一种反模式,通常可以通过以下方式解决:
从 reducer 中删除该逻辑并将其移至选择器
好的,如果可能的话。
将附加信息传递到操作中;
有时它很好,但通常会引入不必要的性能损失。 要将附加信息传递给操作,应通过 useSelector 将其检索到可能不需要它的组件中,请阅读:更多重绘。
让视图代码执行两个动作。
再次,很好,但并非总是如此。它需要将动作序列放在多个组件中,而不是具有简单的逻辑, 当一个动作导致另一个动作时。
提到的一个问题:
reducer 与彼此的状态形状耦合,这使状态结构中的任何重构或更改变得复杂。
可以通过使用选择器而不是直接访问“外部”状态来轻松避免。
这种方法是否有真正的理由成为反模式?
【问题讨论】:
标签: reactjs redux redux-saga redux-toolkit