2024-08-27 10:10:05 +08:00

46 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 课程总结
这门课咱们从零开始搭建了一个 mini 版的 react并且实现了 react 中比较核心的几个功能:
- 调度器的实现
- Scheduler
- 最小堆的实现
- Fiber 结构的创建
- 如何生成一颗 Fiber 树
- Fiber 子节点的协调
- diff 算法,核心 5 个步骤:
1. 从左边往右边进行新节点vnode进行遍历和旧节点fiber进行比较如果可以复用则拿到复用继续往右不能复用就停止第一轮遍历
2. 检查 newChildren新节点 vnode 的数组)是否遍历完毕,如果遍历完了但是老节点还存在,那么需要将老节点删除掉
3. 完全没有老节点,那么就是初次渲染,做和初次渲染相关的操作;还需要注意一种情况,老节点没有了,但是新节点还有剩余,那么对于这些剩余的新节点来讲,也是初次渲染
4. 新老节点都还有剩余
- 把剩下的老节点构建到一张哈希表里面( map 结构)
- 遍历剩余的新节点,通过新节点的 key 去哈希表里面查找节点,找到能够复用的,就拿来复用,并且删除哈希表中对应的已经复用了的节点
5. 如果经历了上面的步骤之后,哈希表还有剩余,那么所剩余的节点也就没有用了,说明是无论如何都无法复用,那么直接删除即可
- 实现了一些很重要的方法
- scheduleCallback负责将一个任务放到任务队列里面
- workloop在浏览器渲染每一帧的时候如果还有剩余时间那么会执行
- performUnitOfWork处理每一颗 fiber 对象
- beginWork
- completeWork
- 节点的提交
- 其核心就是根据 fiber 身上不同的 flags 来做不同的事情
- 基本的 Hooks 的实现
- useState
- useReducer
- useEffect
大家下去可以根据自己的兴趣,自行深挖 react 源码,完善我们的这个 mini 版的 react。记住兴趣最重要