Skip to content

为什么要引入fiber

在React 16之前是没有fiber的,如果碰到标签元素很多的页面,并且会频繁刷新,React 15会出现掉帧情况。

那么React 15是如何渲染的呢?

渲染一个元素到界面上

index.jsx:

jsx
import React from 'react'
import ReactDOM from 'react-dom'
let element = (
    <div id="0">
        <div id="1">1</div> 
        <div id="2">2</div> 
    </div>
)
ReactDOM.render(element, document.getElementByld("root"));

其中

jsx
let element = (
    <div id="0">
        <div id="1">1</div> 
        <div id="2">2</div> 
    </div>
)

是jsx语法糖,这段代码在编译时会被转换为React.element调用:

js
let element = React.createElement(
  'div',
  { id: '0' },
  React.createElement('div', { id: '1' }, '1'),
  React.createElement('div', { id: '2' }, '2')
);

这也是引入'react'库,却没看到它使用的原因,因为编译需要用到。(ps: React 17之后不用手动引入了)

HTML ==> React.createElement ==> 虚拟DOM ==> 实际DOM ==> 页面显示

我们可以通过console.log打印虚拟DOM。

jsx
import React from 'react'
import ReactDOM from 'react-dom'
let element = (
    <div id="0">
        <div id="1">1</div> 
        <div id="2">2</div> 
    </div>
)

console.log(element)
ReactDOM.render(element, document.getElementByld("root"));