【发布时间】: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,以及功能组件,
- 组件直接作为带有
props对象的函数调用 - 它返回一个 React 元素,即对要渲染的 DOM 元素进行建模的对象
- React DOM 然后创建一个 DOM 节点并将其插入“真实”DOM
基于类的组件的流程有所不同:
- 组件类被实例化,对象实例存储在内存中
- 调用渲染方法并返回 React 元素(对象)
- 由其类实例支持的 React 元素被 React DOM 用来生成和挂载一个实际的 DOM 节点
根据文章,最大的区别是“函数组件没有实例”,这意味着它们是直接调用的。 React DOM“只是使用函数的调用来确定要为函数渲染的 DOM 元素”。
但是,这与其他来源不一致。例如,here 和here Dan Abramov 提到功能组件在内部是类。换句话说,React 只是将一个功能组件包装到一个类中并实例化它,就好像它是一个类组件一样。 Another article 竟然说前者比后者还要慢。
问题
- React 是否将功能组件转换为类组件?
- (目前)使用函数式是否有任何性能优势,而不是 比类组件? (例如 here 它说还没有好处,我假设在 React Fiber 之前?)
- 如果我真的应该牺牲我的工作流程吗? 可以在整个应用程序中具有状态,它在逻辑上适合,例如树深处某个地方的表单/受控组件?
【问题讨论】:
标签: javascript reactjs components