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

相关推荐
拜无忧5 小时前
2025最新React项目架构指南:从零到一,为前端小白打造
前端·react.js·typescript
冰冷的bin6 小时前
【React Native】点赞特效动画组件FlowLikeView
react native·react.js·typescript
Jedi Hongbin7 小时前
Three.js shader内置矩阵注入
前端·javascript·three.js
光影少年7 小时前
react16到react19更新及底层实现是什么以及区别
前端·react.js·前端框架
掘金安东尼7 小时前
Node.js 如何在 2025 年挤压 I/O 性能
前端·javascript·github
得物技术8 小时前
前端日志回捞系统的性能优化实践|得物技术
前端·javascript·性能优化
ZKshun8 小时前
[ 前端JavaScript的事件流机制 ] - 事件捕获、冒泡及委托原理
javascript
薛定谔的算法8 小时前
JavaScript栈的实现与应用:从基础到实战
前端·javascript·算法
深圳外环高速8 小时前
React 受控组件如何模拟用户输入
前端·react.js