其他分享
首页 > 其他分享> > React技术揭密学习(一)

React技术揭密学习(一)

作者:互联网

学习React技术揭秘

React15架构

15 - Reconciler

15 - Renderer

缺点

React16

16 - Scheduler

16 - Reconciler

Fiber心智模型

Fiber实现原理

// 指向父级Fiber节点
/**
 * return 指的是当前节点执行完`completeWork`后, 返回的下一个工作单元
 */
this.return = null;
// 指向子Fiber节点
this.child = null;
// 指向右边第一个兄弟Fiber节点
this.sibling = null;

function App() {
  return (
    <div>
      i am
      <span>KaSong</span>
    </div>
  )
}
// Fiber对应组件的类型 Function/Class/Host...
this.tag = tag;
// key属性
this.key = key;
// 大部分情况同type,某些情况不同,比如FunctionComponent使用React.memo包裹
this.elementType = null;
// 对于 FunctionComponent,指函数本身,对于ClassComponent,指class,对于HostComponent,指DOM节点tagName
this.type = null;
// Fiber对应的真实DOM节点
this.stateNode = null;
// 保存本次更新造成的状态改变相关信息
this.pendingProps = pendingProps;
this.memoizedProps = null;
this.updateQueue = null;
this.memoizedState = null;
this.dependencies = null;

this.mode = mode;

// 保存本次更新会造成的DOM操作
/**
 * 形成effectList链表, 递归调用所有需要改变的组件
 */
this.effectTag = NoEffect;
this.nextEffect = null;
this.firstEffect = null;
this.lastEffect = null;

// 调度优先级相关
this.lanes = NoLanes;
this.childLanes = NoLanes;

Fiber工作原理

mount时

  1. 首次执行ReactDOM.render创建FiberRootNode(源码中称为fiberRoot), 和rootFiber
    1. fiberRootNode为整个应用的根节点, rootFiber为当前render函数中传入组件的根节点
    2. current指向的rootFiber没有任何子fiber节点, current fiber树为空.
  2. render阶段, 根据组件返回的jsx, 在内存中以此创建fiber节点, 并链接在一起构成fiber树, 称为workInProcess fiber树
    1. 构建workInProcess fiber树时, 会尝试复用current fiber树中已有的fiber节点的内在属性
    2. 首屏渲染时只有rootFiber存在对应的current fiber. rootFiber.alternate => current rootFiber
  3. 构建完成的workInProcess fiber树, 在commit阶段渲染到页面上
    1. 此时dom树, 就变为了workInProcess fiber树对应的样子
    2. fiberRootNode更改current指针, 到workInProcess fiber
    3. workInProcess fiber树变为了current fiber

update时

  1. 我们点击p节点, 触发状态更新, 开启一次新的render阶段, 并构建一颗新的workInProcess fiber树
    1. workInProcess fiber的创建, 可以复用current fiber树对应的数据节点
    2. 是否复用的过程就是diff算法
  2. workInProcess Fiber树render阶段完成构建后进入到commit阶段渲染到页面上
    1. 渲染完毕后workInProcess Fiber树变为current Fiber树
  3. Fiber树在构建和替换的过程中, 完成dom的更新操作

JSX

标签:学习,揭密,更新,React,Fiber,fiber,组件,Reconciler,节点
来源: https://www.cnblogs.com/zhangrunhao/p/15860637.html