我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

  • 基础

  • 框架

    • react

      • 说说对React的理解,有哪些特性
      • 说说对React高阶组件的理解
      • 谈谈React中fiber的理解
        • 是什么
        • 怎么用
        • 原理
        • FAQ
      • 说说对React事件机制的理解
      • 说说对React中受控组件和非受控组件的理解及应用场景
      • 说说对redux工作流程的理解
      • 说说对redux中间件的理解
      • 说说对state和props的理解,有什么区别
      • 说说函数组件和类组件的理解和区别
      • 说说真实DOM和VDOM的区别,优缺点
      • 说说React.memo&useMemo&useCallback区别
      • 说说React路由有几种模式以及实现原理
      • 说说React生命周期有哪些不同阶段?每个阶段对应的方法
      • 说说React事件绑定有哪些
      • 说说React中的setState执行机制
      • 说说React中refs的理解
      • React构建组件有哪些方式及区别
      • React引入css的方式有哪几种
      • 谈谈React中key的作用
      • React中如何性能优化
      • React中hooks能取代redux吗
      • React组件通信方式有哪些
  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 框架
  • react
fangdown
2021-08-01
目录

谈谈React中fiber的理解

# 是什么

一个fiber就是一个js对象,包含了元素的信息,更新队列、类型

是一种基于浏览器的单线程调度算法

# 怎么用

fiber把更新渲染过程分成许多子任务, 每次只做一小部分,做完之后,看有没有剩余时间,若有,则继续下一个子任务,若没有,则把控制权交给浏览器主线程, 等主线程不忙的时候再继续执行

# 原理

基于fiber节点的能力实现:

对于静态节点:保存了节点类型、对于dom节点信息

对于动态节点:保存了更新组件的状态,要执行的动作

多个fiber节点构成树: this.return 父节点 this.child this.sibling

// 指向父级Fiber节点
this.return = null
// 指向子Fiber节点
this.child = null
// 指向右边第一个兄弟Fiber节点
this.sibling = null

# FAQ

type Fiber = {
  // 用于标记fiber的WorkTag类型,主要表示当前fiber代表的组件类型如FunctionComponent、ClassComponent等
  tag: WorkTag,
  // ReactElement里面的key
  key: null | string,
  // ReactElement.type,调用`createElement`的第一个参数
  elementType: any,
  // The resolved function/class/ associated with this fiber.
  // 表示当前代表的节点类型
  type: any,
  // 表示当前FiberNode对应的element组件实例
  stateNode: any,

  // 指向他在Fiber节点树中的`parent`,用来在处理完这个节点之后向上返回
  return: Fiber | null,
  // 指向自己的第一个子节点
  child: Fiber | null,
  // 指向自己的兄弟结构,兄弟节点的return指向同一个父节点
  sibling: Fiber | null,
  index: number,

  ref: null | (((handle: mixed) => void) & { _stringRef: ?string }) | RefObject,

  // 当前处理过程中的组件props对象
  pendingProps: any,
  // 上一次渲染完成之后的props
  memoizedProps: any,

  // 该Fiber对应的组件产生的Update会存放在这个队列里面
  updateQueue: UpdateQueue<any> | null,

  // 上一次渲染的时候的state
  memoizedState: any,

  // 一个列表,存放这个Fiber依赖的context
  firstContextDependency: ContextDependency<mixed> | null,

  mode: TypeOfMode,

  // Effect
  // 用来记录Side Effect
  effectTag: SideEffectTag,

  // 单链表用来快速查找下一个side effect
  nextEffect: Fiber | null,

  // 子树中第一个side effect
  firstEffect: Fiber | null,
  // 子树中最后一个side effect
  lastEffect: Fiber | null,

  // 代表任务在未来的哪个时间点应该被完成,之后版本改名为 lanes
  expirationTime: ExpirationTime,

  // 快速确定子树中是否有不在等待的变化
  childExpirationTime: ExpirationTime,

  // fiber的版本池,即记录fiber更新过程,便于恢复
  alternate: Fiber | null,
}
#react#fiber
上次更新: 2021/12/19, 18:05:42
说说对React高阶组件的理解
说说对React事件机制的理解

← 说说对React高阶组件的理解 说说对React事件机制的理解→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式