React - 拥有不可变道具的好处是什么?

mic*_*ech 5 javascript functional-programming reactjs

在学习了React之后,我仍然认为很多概念很难得到.

其中:道具的不变性.

如果我做对了,那么组件或多或少地等同于面向对象编程中的对象.

在面向对象的编程中,您可以通过method-parameter将数据传递到对象中.在React中,您获得了将数据传递到组件的道具.

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

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

我见过的所有文献和内容都提到这些不变性是一个重要的概念.但到目前为止还没有人真正告诉我原因.

有人可以告诉我:拥有不可变的道具有什么好处?

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

最好是一个很好的例子.然后我可能会得到它的机会更大.

Dog*_*oku 8

我会保持简短,因为我不是函数式编程方面的专家.我相信拥有更多经验的人最终会投入.

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

数学中的函数是纯粹的.你给他们一个输入,他们给你一个输出.它们没有副作用,也不使用任何其他输入.这给你带来了很多好处:

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

这些只是一些好处,像我这样的普通开发者可以看到.我相信拥有真正的函数式编程经验的人可以获得更多.希望能帮助到你