React-What'It’拥有不可变的道具有很大的好处

React - What's the great benefit of having immutable props?

本文关键字:不可变 It 拥有 React-What      更新时间:2023-09-26

在学习React之后,我仍然认为许多概念很难理解。

其中包括:道具的不变性。

如果我做对了,那么组件或多或少相当于面向对象编程中的对象。

在面向对象编程中,通过方法参数将数据传递到对象中。在React中,您获得了将数据传递到组件中的道具。

如果将参数传递给Java方法,则可以在方法体中更改这些数据。没问题。

在React中不可能,因为道具是不可变的。

我所看到的所有文献和资料都提到这些不变性是一个重要的概念。但到目前为止,还没有人真正告诉我为什么。

有人能告诉我:拥有不变道具有什么好处吗

或者分别:没有不变性的最大缺点是什么?如果道具是可变的,会发生什么?

作为一个好榜样是可取的。那么我得到它的机会就更大了。

我将保持简短,因为我不是函数式编程专家。我相信最终会有更有经验的人加入。

首先,不要将组件视为对象,而是将其视为函数(如数学术语)您的组件是其属性的函数。更具体地说,它是一个渲染函数。它获取道具并返回HTML(实际上它返回虚拟dom树,但这无关紧要)

数学中的函数是。你给他们一个输入,他们给你一个输出它们没有副作用并且它们不使用任何其他输入。这给了你一些巨大的好处:

  1. 纯函数是可预测的。每个输入都将具有完全相同的输出。可预测性意味着它们可以被优化,并利用记忆之类的东西来缓存它们的结果,或者如果它们的道具自以来没有更改,则不必渲染UI的部分,因为你知道它们不会更改
  2. 当您不需要担心全局状态时,在尝试调试错误时,仅依赖于所提供的输入会有很大帮助您只需要担心传递给您的属性
  3. 您不必担心纯函数的执行顺序,因为它们保证不会产生任何副作用
  4. 它允许非常酷的开发人员体验,如时间旅行调试热插拔组件

这些只是一些好处,像我这样的普通开发人员可以看到。我相信有真正功能编程经验的人可以带来更多。希望它能帮助

(阅读以下内容后,我为什么可以在react.js中更新道具?)

如果你只能改变自己的状态,并且你用道具间接地交流你的状态,这是一种很好的责任分离。这会产生更高的内聚力。

如果允许您在组件A中通过直接更改道具来更改组件B的状态,那么就有可能生成更不易理解的代码。

我希望这能回答为什么。

不变性的最大好处是,无论您的组件呈现什么,都是可预测的。生成的视图只是一些道具的地图。想象一下,如果在一个层次结构中,每个组件都能够更改传递的道具。很难追踪到底是谁做了修改。

这就是为什么在函数式编程中,纯函数和不可变类型是规范的原因。很容易推理——纯函数是输入和输出的纯映射,仅此而已。