4

这个链接上(很多人提到,为了理解React 16的架构)它被提到: 在此处输入图像描述

甚至 React 中的 Elements 也是包含组件信息的普通 JS 对象,具有以下四个属性:

{
  type,
  ref,
  props,
  key
}

我现在想知道 Component、Element、Instance 和这个新的Fiber对象之间的明显区别。此外,这个新的 Fiber 对象是否与图片中提到的具有更多新属性的旧 Element 对象相同?

4

2 回答 2

2

Fiber 是一个 JavaScript 对象,其中包含有关组件、其输入和输出的信息。它与实例具有一对一的关系。它管理实例的工作。纤程使用属性 stateNode 跟踪实例。它也有关于它与其他实例的关系的信息。

从这里的源代码: https ://github.com/facebook/react/blob/9ea4bc6ed607b0bbd2cff7bbdd4608db99490a5f/packages/react-reconciler/src/ReactFiber.js#L406

export function createFiberFromElement(
  element: ReactElement,
  mode: TypeOfMode,
  expirationTime: ExpirationTime,
): Fiber {
  let owner = null;
  if (__DEV__) {
    owner = element._owner;
  }

  let fiber;
  const type = element.type;
  const key = element.key;
  const pendingProps = element.props;

  let fiberTag;
  if (typeof type === 'function') {
  ....
  ....
  ....

我可以理解 React Fiber reconciler 使用 react 元素为组件实例生成一个 Fiber 节点。因此,您可以将其视为具有时间管理超能力的反应元素。

于 2018-10-14T19:54:22.050 回答
0

区别不在于结构的属性,而在于它们所代表的内容。

React Element 是一个描述你想在屏幕上看到的东西的对象。基本上是什么出来的渲染方法。

React Fiber(小写)是一种表示工作单元的数据结构。

React Fiber(大写)的最大优势是调度。React now 可以暂停,允许其他事情发生,然后恢复到它离开的地方。为此,React 需要知道它离开了哪里以及接下来需要做什么。这就是纤维所允许的(在其他事物之间)。

于 2018-07-24T11:09:49.920 回答