-
请简述 React 16 版本中初始渲染的流程 初始渲染分为render 和 commit 两个阶段,主要流程:
- 构建FiberRoot 和 rootFiber两个对象, 并建立引用关系
- 计算过期时间,确定任务的优先级,创建待执行的任务
- 判断任务是否是同步任务,调用同步任务入口
- 构建 workInProgress Fiber 树
- 完成render阶段,进入提交阶段
- 提交第一阶段 ,调用类组件的 getSnapshotBeforeUpdate 生命周期函数
- 提交第二阶段, 根据 effectTag 执行 DOM 操作
- 提交第三阶段, 调用类组件的生命周期函数componentDidMount 或 调用函数组件的useEffect钩子函数
-
为什么 React 16 版本中 render 阶段放弃了使用递归 使用循环递归比对virtualDOM时, 如果virtualDOM 对象的层级比较深的情况下,会由于JavaScript是单线程的执行任务,且无法中断,这样会导致用户的操作无法及时响应,动画无法加载等,页面出现卡顿现象。因此, React 16 放弃了循环递归的方式,采用了循环模拟递归的方式,利用了浏览器的空闲时间去做比对,从而解决了页面卡顿的问题
-
请简述 React 16 版本中 commit 阶段的三个子阶段分别做了什么事情
第一阶段 :调用类组件的 getSnapshotBeforeUpdate 生命周期函数
第二阶段: 根据 effectTag 执行 DOM 操作
第三阶段:调用类组件的生命周期函数componentDidMount 或 调用函数组件的useEffect钩子函数
-
请简述 workInProgress Fiber 树存在的意义是什么 当进行更新时, workInProgress Fiber 树 在内存中构建,构建完成后会用于替换当前的current Fiber,达到快速更新DOM,快速完成页面的更新