引言
React-Hooks 的使用原则
- 只在 React 函数中调用 Hook
- 不要在循环、条件或嵌套函数中调用 Hook
要确保 Hooks 在每次渲染时都保持同样的执行顺序
从现在看问题:若不保证 Hooks 执行顺序,会带来什么麻烦?
demo 略。(就是把 hooks 写在 if 中导致了一个问题)
按道理来说,渲染没有问题
React 就没有理由阻止我的渲染动作
从源码调用流程看原理:Hooks 的正常动作,在底层依赖于顺序链表
强调“源码流程”而非“源码”
- 目前仍然处理基础夯实阶段,盲目啃源码在这个阶段来说没有意义
- 原理 !== 源码,阅读源码只是掌握原理的一种手段,而 React-Hooks的源码链路相对来说比较长,学习成本比较高,学习效果也难以保证
不建议你:在对 Fiber 底层实现没有认知的前提下,去和 Hooks 源码死磕
重要的是并不是去细抠每一行代码到底都做了什么,而是要搞清楚整个调用链路是什么样的
mountState:构建链表并渲染
updateState:依次遍历链表并渲染
hooks 的渲染是通过“依次遍历”来定位每个 hooks 内容的。如果前后两次读到的链表在顺序上出现差异,那么渲染的结果自然是不可控的
总结
过去三个课时里
我们摸排了“动机”,认知了“工作模式”
最后更是结合源码、深挖了一把 React-Hooks 的底层原理
虚拟 DOM -> Diff 算法 -> Fiber 架构