功能组件是否在引擎盖下变成了类组件?

Ale*_*lex 5 javascript components reactjs

我在 React 文档中发现了一些差异。在关于Components 和 Props的部分中,他们通过一个功能 Welcome组件的例子来解释,

React 调用Welcome组件 with {name: 'Sara'}as the props。

很公平,因为该组件是一个纯函数。然后在State 和 Lifecycle 中,他们通过 Clock组件的例子提到,

React 调用Clock组件的构造函数。[...] React 然后调用 Clock 组件的render()方法。

通过阅读文档以及这篇 Medium post功能组件,

  1. 该组件作为带有props对象的函数被直接调用
  2. 它返回一个 React 元素,即一个对要渲染的 DOM 元素进行建模的对象
  3. React DOM 然后创建一个 DOM 节点并将其插入到“真实”的 DOM 中

流程与基于类的组件不同:

  1. 组件类被实例化,对象实例存储在内存中
  2. 调用 render 方法并返回 React 元素(对象)
  3. React 元素,由它的类实例支持,被 React DOM 用来生成和挂载一个实际的 DOM 节点

根据文章,最大的区别在于“功能组件没有实例”,这意味着它们是直接调用的。React DOM“只是使用函数的调用来确定要为函数呈现什么 DOM 元素”。

然而,这与其他来源不一致。例如,这里这里Dan Abramov 提到功能组件是内部的类。换句话说,React 只是将一个功能组件包装到一个类中并实例化它,就好像它是一个类组件一样。另一篇文章甚至说前者比后者还要慢。

  • React 是否将功能组件转换为类组件?
  • 使用函数式组件而不是类组件是否(还)有任何性能优势?(例如,这里说还没有任何好处,我假设在 React Fiber 之前?)
  • 我真的应该牺牲我的工作流程,如果我可以在整个应用程序中拥有状态,它在逻辑上适合哪里,例如树深处某处的表单/受控组件?

ill*_*ter 2

React 会将函数组件转换为类组件吗?

\n\n
\n

还没有 \xe2\x80\x9coptimized\xe2\x80\x9d 对它们(功能组件)的支持,因为无状态组件在内部包装在类中。这是相同的代码路径。

\n
\n\n

来自丹·阿布拉莫夫的推特帖子。

\n\n

使用函数组件而不是类组件有什么性能优势吗?

\n\n

显然,现在没有任何性能优势,因为 React 在功能组件上做了很多事情,这降低了性能。阅读本文以获得更多理解。

\n\n

我真的应该牺牲我的工作流程吗

\n\n

我猜不会

\n