14

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

4

2 回答 2

27

三个主要原因:

  • 不可变地更新嵌套的 Javascript 对象通常会导致更难维护的丑陋代码,除非您使用实用程序库来封装该过程
  • 不可变地更新嵌套数据要求您返回嵌套层次结构中所有项目的新副本。由于组件通常对数据进行浅等式引用比较以查看它们是否需要更新,更新嵌套数据通常意味着更新更多对象,即使实际数据没有不同,也可能需要重新渲染更多组件。
  • 平面数据,特别是规范化数据,可以使用一些更优化的方法来定义组件(例如,每个列表项组件本身连接的列表,给定项目 ID 作为道具,并负责通过以下方式查找自己的项目数据那个身份证)
于 2016-08-09T16:30:36.200 回答
9

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

于 2016-08-09T06:40:40.103 回答