diff --git a/自顶向下学 React 源码/React 源码的碎片记录.md b/自顶向下学 React 源码/React 源码的碎片记录.md index e243255..59ad412 100644 --- a/自顶向下学 React 源码/React 源码的碎片记录.md +++ b/自顶向下学 React 源码/React 源码的碎片记录.md @@ -14,4 +14,4 @@ - React 的双缓存:每一次 React 的更新都会创建一个 workInProgress Fiber 树,current Fiber 和 workInProgress Fiber 之间使用 alternate 属性链接,方便公用属性,当 workInProgress Fiber 完成渲染,FiberRootNode 的指针就会指向 workInProgress Fiber 树的根节点 RootFiber,这时 workInProgress Fiber 就变成了 current Fiber 树 - React 会尽量的复用 Fiber,在创建 workInProgress Fiber 时,如果 current Fiber 中节点的 alternate 属性已经指向一个 Fiber 节点,那么新创建的 workInProgress Fiber 节点就会基于这个 alternate 指向的 Fiber 节点来创建,这种基于已有 Fiber 节点做对比生成新的 workInProgress Fiber 的过程就是 diff 算法,所以首屏渲染和更新渲染最大的区别就在于是否有 diff 算法 - 对于首屏渲染来说,只有根节点具有 current Fiber 而子节点不存在 -- React render 阶段的g \ No newline at end of file +- React render 阶段的工作分为归阶段和递阶段,在递阶段执行 beginWork,而在归阶段,执行 completeWork \ No newline at end of file diff --git a/自顶向下学 React 源码/beginWork 和 completeWork.md b/自顶向下学 React 源码/beginWork 和 completeWork.md new file mode 100644 index 0000000..10281d5 --- /dev/null +++ b/自顶向下学 React 源码/beginWork 和 completeWork.md @@ -0,0 +1,2 @@ +# beginWork 和 completeWork +在 [[React 源码的碎片记录]] 中写了 \ No newline at end of file diff --git a/自顶向下学 React 源码/奇怪的疑惑.md b/自顶向下学 React 源码/奇怪的疑惑.md index c559f8e..66eb55c 100644 --- a/自顶向下学 React 源码/奇怪的疑惑.md +++ b/自顶向下学 React 源码/奇怪的疑惑.md @@ -3,4 +3,5 @@ - [x] JSX 和 Fiber 的关系 首屏渲染时 JSX 是创建 Fiber 节点的依据,更新渲染时,JSX 会和 current Fiber 树中的节点做对比生成 workInProgress Fiber - [x] React Components 与 React Element 的关系 - Components 会作为 React.createElement 的第一个参数,也就是 type 参数 \ No newline at end of file + Components 会作为 React.createElement 的第一个参数,也就是 type 参数 +- [ ] 什么是深度优先遍历 \ No newline at end of file