React Hooks为什么要在顶层使用?

为什么必须在函数顶层使用hooks?

使用过 hooks 的小伙伴应该都会发现,hooks只能在函数式组件的顶层使用,不能在循环,条件或嵌套函数中调用 Hook。

为什么呢?

查阅了很多答案,总结如下:

hooks 是 react 16.8版本推出的,而react v16版本最大的改变就是引入了fiber架构。hooks的实现就是基于fiber的。每个组件都会生成一个 FiberNode(节点),组件内使用的 hook 会以链表的形式挂在 FiberNode 的 memoizedState 上面。各个 FiberNode 汇聚起来会变成一颗 Fiber 树,React 每次会以固定的顺序 遍历这棵树,这样就把整个页面的 hook 都串联起来了。

当 react 重新渲染时,会生成一个新的 fiber 树,而这里会根据之前已经生成的 FiberNode ,拿到之前的 hook ,再复制一份到新的 FiberNode 上,生成一个新的 hooks 链表。
react按顺序来区分不同的 hook,它默认你不会修改这个顺序。如果你没有在顶层使用 hook ,打乱了每次 hook 调用的顺序,就会导致 react 无法区分出对应的 hook

相关推荐
发现一只大呆瓜22 分钟前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
阔皮大师1 小时前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙1 小时前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
_codemonster1 小时前
Vue的三种使用方式对比
前端·javascript·vue.js
全栈前端老曹1 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
低代码布道师2 小时前
Next.js 16 全栈实战(一):从零打造“教培管家”系统——环境与脚手架搭建
开发语言·javascript·ecmascript
一位搞嵌入式的 genius3 小时前
深入 JavaScript 函数式编程:从基础到实战(含面试题解析)
前端·javascript·函数式
choke2333 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
wuhen_n4 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
鹿心肺语4 小时前
前端HTML转PDF的两种主流方案深度解析
前端·javascript