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

相关推荐
2601_9620715736 分钟前
Java进阶(vue基础)
前端·javascript·vue.js
研☆香37 分钟前
数组方法 splice讲解 拓展
开发语言·前端·javascript
————A1 小时前
Agent 文件处理中间件
开发语言·javascript·ecmascript
ITresearchGuest1 小时前
LangChain JS 入门:快速搭建前端 AI 开发环境
前端·javascript·langchain
YHHLAI1 小时前
React + TypeScript 实战:从零构建颜色选择器应用
前端·react.js·typescript
小磊哥er1 小时前
深入解构Claude Code - 第 1 篇 · 先认识它
javascript·ai编程
雪芽蓝域zzs2 小时前
第十节:动态侧边栏菜单(根据路由 meta 自动渲染菜单)
javascript·vue.js·elementui
ttwuai2 小时前
Go 后台管理系统组件库文档怎么写,才不会坑后续维护?
开发语言·javascript·golang
光影少年3 小时前
react navite调试方案:Flipper、远程调试
前端·javascript·react native·react.js·前端框架
海兰3 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(二)
javascript·python·金融