代码之家  ›  专栏  ›  技术社区  ›  Chong Lip Phang

不变性检查中间件在Redux工具包中做什么?

  •  0
  • Chong Lip Phang  · 技术社区  · 2 年前

    我正在学习Redux Toolkit,遇到了configureStore()的默认中间件:

    根据 this page :

    不变性检查中间件:深入比较突变的状态值。它可以在调度期间检测还原子中的突变,也可以检测在调度之间发生的突变(例如组件或选择器中的突变)。当检测到变异时,它将抛出一个错误,并指示在状态树中检测到变异值的关键路径。(由redux不可变状态不变量派生。)

    我很困惑。减缩器和分派函数不应该改变状态值吗?为什么要抛出错误?

    1 回复  |  直到 2 年前
        1
  •  0
  •   phry    2 年前

    很容易意外地改变组件中的状态。

    想象一下你有

    const myList = useSelector(state => state.foo.bar)
    myList.sort()
    

    那是一次意外的状态突变——因为 myList 指的是你的店铺,以及 .store() 对数组进行变异,而不是创建新的排序副本。

    这是一个经常在一段时间内被忽视的错误,直到你在应用程序中遇到一个很难调试的错误。

    至于允许还原剂变异的状态:是和否。在伊默还原剂中,如 createSlice ,您可以编写变异逻辑,但在引擎盖下,它将创建旧状态的新副本,并且永远不会“变异”旧状态,因此这是安全的。但是,如果你正在手写一个减速机,那么很容易做到与上面相同的事情——调用 .sort() .push 你不小心修改了旧的存储值。

    中间件同时检查这两种情况:还原子之外的意外突变,以及手写体中的意外突变。