React高级进阶教程-深入Hooks工作机制:“原则”的背后,是“原理”

351 阅读1分钟

引言

React-Hooks 的使用原则

  • 只在 React 函数中调用 Hook
  • 不要在循环、条件或嵌套函数中调用 Hook

要确保 Hooks 在每次渲染时都保持同样的执行顺序

从现在看问题:若不保证 Hooks 执行顺序,会带来什么麻烦?

demo 略。(就是把 hooks 写在 if 中导致了一个问题)

按道理来说,渲染没有问题

React 就没有理由阻止我的渲染动作

从源码调用流程看原理:Hooks 的正常动作,在底层依赖于顺序链表

强调“源码流程”而非“源码”

  • 目前仍然处理基础夯实阶段,盲目啃源码在这个阶段来说没有意义
  • 原理 !== 源码,阅读源码只是掌握原理的一种手段,而 React-Hooks的源码链路相对来说比较长,学习成本比较高,学习效果也难以保证

不建议你:在对 Fiber 底层实现没有认知的前提下,去和 Hooks 源码死磕

重要的是并不是去细抠每一行代码到底都做了什么,而是要搞清楚整个调用链路是什么样的

mountState:构建链表并渲染 image.png

updateState:依次遍历链表并渲染 image.png

hooks 的渲染是通过“依次遍历”来定位每个 hooks 内容的。如果前后两次读到的链表在顺序上出现差异,那么渲染的结果自然是不可控的

总结

过去三个课时里

我们摸排了“动机”,认知了“工作模式”

最后更是结合源码、深挖了一把 React-Hooks 的底层原理

虚拟 DOM -> Diff 算法 -> Fiber 架构