我正在学习Redux,并遇到了configureStore()的默认中间件:
根据此页
不可变检查中间件:深入比较突变的状态值。它可以在调度期间检测减速器中的突变,也可以检测在调度(例如组件或选择器中)之间发生的突变。当检测到突变时,它将抛出一个错误,并指示在状态树中检测到变异值的关键路径。(从redux-不可变状态不变量分叉。)
我很困惑。还原器和分派函数不应该改变状态值吗?为什么要抛出错误?
发布于 2022-05-03 06:18:42
很容易在组件中意外地改变状态。
想象一下你有这样的东西
const myList = useSelector(state => state.foo.bar)
myList.sort()
这是一个偶然的状态突变--因为myList
是对您的存储的引用,而.sort()
改变了一个数组,而不是创建一个新的排序副本。
这是一个经常被忽略的bug,直到您变得非常奇怪,很难在应用程序中调试bug。
至于减速器被允许突变状态:是和否。在类似于createSlice
的immer还原器中,您可以编写变异逻辑,但是在引擎盖下,它将创建旧状态的新副本,并且永远不会“变异”旧状态--因此这是安全的。但是,如果您正在手工编写一个还原器,那么很容易完成与上面相同的操作--调用.sort()
或.push
,然后意外地修改旧的存储值。
中间件检查了这两种情况:减速器外的意外突变,以及手写的意外突变。
https://stackoverflow.com/questions/72095307
复制相似问题