【问题标题】:Are functional components turned into class components under the hood?功能组件是否在引擎盖下变成了类组件?
【发布时间】:2018-07-13 14:44:33
【问题描述】:

我在 React 文档中发现了一些差异。在Components and Props 部分,他们通过功能性 Welcome 组件的示例解释了

React 以 {name: 'Sara'} 作为 props 调用 Welcome 组件。

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

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

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

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

基于类的组件的流程有所不同:

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

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

但是,这与其他来源不一致。例如,herehere Dan Abramov 提到功能组件在内部是类。换句话说,React 只是将一个功能组件包装到一个类中并实例化它,就好像它是一个类组件一样。 Another article 竟然说前者比后者还要慢。

问题

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

【问题讨论】:

    标签: javascript reactjs components


    【解决方案1】:

    React 是否将功能组件转换为类组件?

    目前还没有对它们(功能组件)的“优化”支持,因为无状态组件在内部封装在一个类中。相同的代码路径。

    来自 Dan Abramov 的推特帖子。

    使用函数式组件而不是类组件是否有任何性能优势?

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

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

    我猜不是

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 2019-05-06
      • 2020-09-03
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多