React面试总结

React中JSX转换为真实Dom的过程

可以从几个大体过程来看

  1. jsx语法解析
    jsx语法解析成js代表的对象,即把jsx语法转换为基于js的React.createElement(args1,args2,args3),args1,args2,args3分别是标签类型、属性和标签内容,主要利用的是babel等库
  2. 虚拟dom构建
    react基于js的对象构建虚拟dom。虚拟dom是个树形结构,用于描述页面的结构和属性
  3. 虚拟dom的diff
    react会对比vdom更新操作前后的虚拟dom,找出两者差异
  4. 真实dom的操作
    对比出虚拟dom的差异后,将dom更新在真实dom上生效

React生命周期

  • 挂载

    组件初始化

    • constructor 初始化state和props
    • static getDrivedStateFromProps
    • render 创建虚拟dom
    • didmount 第一次渲染后
  • 更新

    state和props发生变化时更新组件

    • static getDrivedStateFromProps
    • shouldComponentUpdate 返回bool值,返回为true才会继续后面的生命周期
    • render
    • didupdate
  • 卸载

    组件卸载时

  • willUnmount

  • static getDrivedStateFromProps

  • render

React setState

setState是个异步方法,会把每次的state放在事件队列中,批量执行,核心是利用了Object.assign(oldState,newState)

fiber

产生由来

react18前,dom更新是通过深度遍历比较vdom的,这个过程是不可打断的(因为只记录的子节点,没有兄弟节点),当dom树深度较深时,就会导致栈深度较深,会占用主线程的渲染资源,所以出现了fiber。fiber其实就是进阶版虚拟dom,是一个含有多个dom属性的js对象,本质是一个含有三个指针的链表结构,分别指向父亲节点、兄弟节点和子节点,这个结构保证了fiber的遍历比较可以被中断(因为不需要重新去遍历dom树节点)

初始化

更新

相关推荐
Roc.Chang2 分钟前
Vue 3 setup 语法糖 computed 的深度使用
前端·javascript·vue.js
玄尺_0075 分钟前
uniapp h5端使浏览器弹出下载框
前端·javascript·uni-app
军军君0111 分钟前
Three.js基础功能学习三:纹理与光照
前端·javascript·3d·前端框架·three·三维·三维框架
淡笑沐白12 分钟前
Vue3基础语法教程
前端·javascript·vue.js
JIngJaneIL19 分钟前
基于java + vue连锁门店管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
Mintopia19 分钟前
🧠 从零开始:纯手写一个支持流式 JSON 解析的 React Renderer
前端·数据结构·react.js
可触的未来,发芽的智生24 分钟前
2025年终总结:智能涌现的思考→放弃冯诺依曼架构范式,拥抱“约束产生智能”
javascript·人工智能·python·神经网络·程序人生
消失的旧时光-194332 分钟前
Flutter 工程中 mixin 的正确打开方式:5 种高质量设计范式 + mixin vs 继承 vs 组合 + 为什么它比 BasePage 更优雅
前端·flutter·架构
乐吾乐科技35 分钟前
乐吾乐3D可视化2025重大更新与2026升级计划
前端·3d·信息可视化·编辑器·数据可视化
C_心欲无痕36 分钟前
html - 使用视频做天气卡片背景
前端·html·音视频