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树节点)

初始化

更新

相关推荐
雨季6663 分钟前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
2601_9495936517 分钟前
基础入门 React Native 鸿蒙跨平台开发:卡片组件
react native·react.js·harmonyos
天人合一peng18 分钟前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
会飞的战斗鸡36 分钟前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling1 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_177767371 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767371 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区1 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO2 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素