Skip to content

useHookAtTopLevel

诊断类别:lint/correctness/useHookAtTopLevel

¥Diagnostic Category: lint/correctness/useHookAtTopLevel

自从:v1.0.0 来源:

¥Since: v1.0.0 Sources:

强制所有 React 钩子都从顶层组件函数调用。

¥Enforce that all React hooks are being called from the Top Level component functions.

要了解为什么需要这个,请参阅 https://react.nodejs.cn/docs/hooks-rules.html#only-call-hooks-at-the-top-level

¥To understand why this required see https://react.nodejs.cn/docs/hooks-rules.html#only-call-hooks-at-the-top-level

¥Examples

¥Invalid

function Component1({ a }) {
if (a == 1) {
useEffect();
}
}
code-block.js:3:9 lint/correctness/useHookAtTopLevel ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This hook is being called conditionally, but all hooks must be called in the exact same order in every component render.

1 │ function Component1({ a }) {
2 │ if (a == 1) {
> 3 │ useEffect();
^^^^^^^^^
4 │ }
5 │ }

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.

See https://react.nodejs.cn/docs/hooks-rules.html#only-call-hooks-at-the-top-level

function Component1({ a }) {
if (a != 1) {
return;
}
useEffect();
}
code-block.js:6:5 lint/correctness/useHookAtTopLevel ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This hook is being called conditionally, but all hooks must be called in the exact same order in every component render.

4 │ }
5 │
> 6 │ useEffect();
^^^^^^^^^
7 │ }
8 │

Hooks should not be called after an early return.

1 │ function Component1({ a }) {
> 2 │ if (a != 1) {

> 3 │ return;
^^^^^^^
4 │ }
5 │

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.

See https://react.nodejs.cn/docs/hooks-rules.html#only-call-hooks-at-the-top-level

¥Valid

function Component1() {
useEffect();
}

¥Related links