React18原理: 渲染与更新时的重点关注事项

概述

  • react 在渲染过程中要做很多事情,所以不可能直接通过初始元素直接渲染
  • 还需要一个东西,就是虚拟节点,暂不涉及React Fiber的概念,将vDom树和Fiber 树统称为虚拟节点
  • 有了初始元素后,React 就会根据初始元素和其他可以生成虚拟节点的东西生成虚拟节点
  • React一定是通过虚拟节点来进行渲染的

常用节点类型

  • 除了初始元素能生成虚拟节点以外,还有哪些可能生成虚拟节点?总共有多少节点类型?

1. Dom节点 (ReactDomComponent)

  • 此dom非彼dom, 这里的dom指的是虚拟dom节点,当初始化元素的type属性为字符串的时候
  • React 就会创建虚拟dom节点,例如,前面使用 jsx 直接书写的 const B = <div></div>
  • 它的属性就是div, 可以打印出来 { type: 'div' }

2. 组件节点 (ReactComposite)

  • class组件和函数式组件
  • type 有两类:class App 或 f Test() 这种举例

3. 文本节点 (ReactTextNode)

  • 直接书写字符串或数字,React 会创建为文本节点
  • 比如,我们可以直接用 ReactDOM.render 方法直接渲染字符串或数字
    import ReactDOM from 'react-dom/client';
    
    const root = ReactDOM.createRoot(document.getElementById('root'));
    
    // root.render('一头猪') // 创建文本节点
    root.render(1111); // 创建文本节点
    

4. 空节点(ReactEmpty)

  • 我们平时写 React 代码的时候,经常会写三目表达式 {this.state.xxx ? <App/> : false}
  • 用来进行条件渲染,只知道为 false 就不会渲染,到底是怎么一回事?
  • 其实,遇到字面量 null, false, true, undefined 在 React 中均会被创建一个空节点
  • 在渲染过程中,如果遇到空节点,那么它将什么都不会做
    import ReactDOM from 'react-dom/client'
    
    const root = ReactDOM.createRoot(document.getElementById('root'));
    // root.render(flase); // 创建空节点 // root.render(true);
    // 创建空节点 root.render(null)
    root.render(undefined) // 创建空节点
    

5. 数组节点(ReactArrayNode)

  • 不是渲染数组本身,当React遇到数组时,会创建数组节点,但是不会直接进行渲染
  • 而是将数组里的每一项按出来,根据不同节点类型去做相应的事情
  • 所以,数组里的每一项只能是这里提到的五个节点类型

渲染过程

  • 通过 document.createElement 创建的元素就是真实的dom
  • React 的工作是通过初始元素或可以生成虚拟节点的东西生成虚拟节点然后针对不同的节点类型去做不同的事情最终生成真实dom挂载到页面上
  • 渲染原理
    • 初始元素和可以生成虚拟节点的东西
    • 虚拟节点:根据不同的节点去做不同的事情
    • 挂载到界面(UI)

首次渲染阶段

  • React 会根据初始元素先生成虚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值