React-What'It’拥有不可变的道具有很大的好处
React - What's the great benefit of having immutable props?
在学习React之后,我仍然认为许多概念很难理解。
其中包括:道具的不变性。
如果我做对了,那么组件或多或少相当于面向对象编程中的对象。
在面向对象编程中,通过方法参数将数据传递到对象中。在React中,您获得了将数据传递到组件中的道具。
如果将参数传递给Java方法,则可以在方法体中更改这些数据。没问题。
在React中不可能,因为道具是不可变的。
我所看到的所有文献和资料都提到这些不变性是一个重要的概念。但到目前为止,还没有人真正告诉我为什么。
有人能告诉我:拥有不变道具有什么好处吗
或者分别:没有不变性的最大缺点是什么?如果道具是可变的,会发生什么?
作为一个好榜样是可取的。那么我得到它的机会就更大了。
我将保持简短,因为我不是函数式编程专家。我相信最终会有更有经验的人加入。
首先,不要将组件视为对象,而是将其视为函数(如数学术语)您的组件是其属性的函数。更具体地说,它是一个渲染函数。它获取道具并返回HTML(实际上它返回虚拟dom树,但这无关紧要)
数学中的函数是纯。你给他们一个输入,他们给你一个输出它们没有副作用并且它们不使用任何其他输入。这给了你一些巨大的好处:
- 纯函数是可预测的。每个输入都将具有完全相同的输出。可预测性意味着它们可以被优化,并利用记忆之类的东西来缓存它们的结果,或者如果它们的道具自以来没有更改,则不必渲染UI的部分,因为你知道它们不会更改
- 当您不需要担心全局状态时,在尝试调试错误时,仅依赖于所提供的输入会有很大帮助您只需要担心传递给您的属性
- 您不必担心纯函数的执行顺序,因为它们保证不会产生任何副作用
- 它允许非常酷的开发人员体验,如时间旅行调试和热插拔组件
这些只是一些好处,像我这样的普通开发人员可以看到。我相信有真正功能编程经验的人可以带来更多。希望它能帮助
(阅读以下内容后,我为什么可以在react.js中更新道具?)
如果你只能改变自己的状态,并且你用道具间接地交流你的状态,这是一种很好的责任分离。这会产生更高的内聚力。
如果允许您在组件A中通过直接更改道具来更改组件B的状态,那么就有可能生成更不易理解的代码。
我希望这能回答为什么。
不变性的最大好处是,无论您的组件呈现什么,都是可预测的。生成的视图只是一些道具的地图。想象一下,如果在一个层次结构中,每个组件都能够更改传递的道具。很难追踪到底是谁做了修改。
这就是为什么在函数式编程中,纯函数和不可变类型是规范的原因。很容易推理——纯函数是输入和输出的纯映射,仅此而已。
- 如何将不可变的js导入angular 2(alpha)
- Lodash懒惰链不'It’我不管用
- JavaScript Array unshift() 以一种不可变的方式
- 将对象从另一个不可变的Map分配给Map是否意味着深度克隆
- 函数在不可变的js和redux存储中
- 如何在JS中创建对象的可变和不可变副本
- 使用动态键返回不可变状态
- 不可变的JS映射或列表
- 如何使用不可变表示此数组重新排序示例
- 不可变,在映射内更新不返回正确的对象
- 不可变的Chai断言错误,而预期的结果等于
- 使用扩展运算符和析构函数运算符修改不可变对象的最短方法是什么
- 如何在类似Om的不可变应用程序状态下对关系数据进行建模
- javascript中不可变的值
- 不可变的js修改所有嵌套的记录
- WebSQL:SQLResultSetRowList 中的返回行是不可变的
- 如何在不可变/反应文档页面上阅读代码示例
- 在不可变JS中更新列表中的对象
- Object.seal(Object.prototype)是否使所有对象不可变?
- React-What'It’拥有不可变的道具有很大的好处