官方文档已经给出了原因:
React relies on the order in which Hooks are called
简单来说,条件语句会导致 hook 被调用的次序发生变化,但是 React hooks 是依赖 hook 被调用的次序来决定该返回什么值的,因此条件语句会导致 hook 失效。
那么 React hook 具体的实现原理是什么样的呢?
有一篇详细介绍的文章: https://zhuanlan.zhihu.com/p/357232384
React 使用链表来实现 Hook 的查找,PReact 使用索引来实现。