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

相关推荐
吴声子夜歌1 小时前
TypeScript——模块解析
javascript·ubuntu·typescript
han_1 小时前
JavaScript设计模式(五):装饰者模式实现与应用
前端·javascript·设计模式
ProgramHelpOa1 小时前
Amazon SDE Intern OA 2026 最新复盘|70分钟两题 Medium-Hard
java·前端·javascript
smchaopiao2 小时前
如何用CSS和JS搞定全屏图片展示
前端·javascript·css
还是大剑师兰特2 小时前
将 Utils.js 挂载为全局(window.Utils.xx)完整配置方案
开发语言·javascript·ecmascript
前端Hardy2 小时前
Qwik 2.0 Beta 来了:不靠 AI,只靠 Resumability,首屏交互快到离谱
前端·javascript·面试
前端Hardy3 小时前
NW.js v0.109.1 最新稳定版发布:被遗忘的桌面开发神器?启动快 3 倍,内存省 70%!
前端·javascript·vue.js
Jinuss3 小时前
源码分析之React中副作用Effect全流程
前端·javascript·react.js
大家的林语冰4 小时前
《前端周刊》尤大官宣 Vite 8 稳定版首发!npm 新官网?React 官网更新。focusgroup 新功能!
前端·javascript·vite
kuuailetianzi4 小时前
构建企业级督办任务系统:Vue3 + TypeScript 实战(多级任务拆解+批量操作+进度追踪+单元格合并)
前端·javascript·typescript