为什么我应该保持状态平坦

Why should I keep the state flat

我将 ReactJs 与 Redux 结合使用,在一些教程和代码中,我看到有人建议并使用 normalizr 保持状态平坦。但保持平坦的真正优势是什么?如果我不这样做,我会遇到什么问题吗?有必要吗?

我假设保持平坦,意味着没有嵌套在状态对象中。
不建议在你的状态中嵌套,因为你必须根据一些事件不断改变你的状态。
如果您查看 redux 文档,他们希望您拥有纯 reducer。使您的函数纯净的一部分是不修改它的参数。
当你有很多嵌套时,很难在不无意中修改状态对象的情况下更改状态,因为所有 JS 对象都是通过引用传递的。当你有很多嵌套时,你必须在修改状态对象之前制作状态对象的深拷贝。

三个主要原因:

  • 不可变地更新嵌套的 Javascript 对象通常会导致更难维护的难看代码,除非您使用实用程序库来结束该过程
  • 不可变地更新嵌套数据需要您 return 嵌套层次结构中所有项目的新副本。由于组件通常对数据进行浅层相等引用比较以查看它们是否需要更新,因此更新嵌套数据通常意味着更新更多对象,并且即使实际数据没有不同,也可能需要重新渲染更多组件。
  • 平面数据,尤其是规范化数据,可以使用一些更优化的方法来定义组件(例如一个列表,其中每个列表项组件本身都是连接的,给定一个项目 ID 作为道具,并负责查找它自己的项目数据)