1
1
---
2
- title : Hooks 规则
2
+ title : Hook 规则
3
3
---
4
4
5
5
<Intro >
6
- Hooks 是通过 JavaScript 函数定义的, 但它们代表了一种特殊的可重用的 UI 逻辑,并且对它们的调用位置有限制。
6
+ Hook 是通过 JavaScript 函数定义的, 但它们代表了一种特殊的可重用的 UI 逻辑,并且对它们的调用位置有限制。
7
7
</Intro >
8
8
9
9
<InlineToc />
10
10
11
11
---
12
12
13
- ## 只在顶层调用 Hooks {/* only-call-hooks-at-the-top-level* /}
13
+ ## 只在顶层调用 Hook {/* only-call-hooks-at-the-top-level* /}
14
14
15
- 名称以 ` use ` 开头的函数在 React 中被称为 [ * Hooks * ] ( /reference/react ) 。
15
+ 名称以 ` use ` 开头的函数在 React 中被称为 ** [ Hook ] ( /reference/react ) ** 。
16
16
17
- ** 不要在循环、条件、嵌套函数或 ` try ` /` catch ` /` finally ` 块中调用 Hooks ** 相反,你应该在 React 函数的顶层调用 Hooks ,并且在任何提前返回之前。你只能在 React 渲染函数组件时调用 Hooks :
17
+ ** 不要在循环、条件、嵌套函数或 ` try ` /` catch ` /` finally ` 块中调用 Hook ** 相反,你应该在 React 函数的顶层调用 Hook ,并且在任何提前返回之前。你只能在 React 渲染函数组件时调用 Hook :
18
18
19
- * ✅ 在[ 函数组件] ( /learn/your-first-component ) 的顶层调用 Hooks 。
20
- * ✅ 在[ 自定义 Hooks ] ( /learn/reusing-logic-with-custom-hooks ) 的顶层调用 Hooks 。
19
+ * ✅ 在[ 函数组件] ( /learn/your-first-component ) 的顶层调用 Hook 。
20
+ * ✅ 在[ 自定义 Hook ] ( /learn/reusing-logic-with-custom-hooks ) 的顶层调用 Hook 。
21
21
22
22
``` js{2-3,8-9}
23
23
function Counter() {
@@ -33,14 +33,14 @@ function useWindowWidth() {
33
33
}
34
34
```
35
35
36
- 在其他任何情况下调用以 ` use ` 开头的 Hooks 是不支持的,例如:
36
+ 在其他任何情况下调用以 ` use ` 开头的 Hook 是不支持的,例如:
37
37
38
- * 🔴 不要在条件或循环中调用 Hooks 。
39
- * 🔴 不要在条件 ` return ` 语句之后调用 Hooks 。
40
- * 🔴 不要在事件处理程序中调用 Hooks 。
41
- * 🔴 不要在类组件中调用 Hooks 。
42
- * 🔴 不要在传递给 ` useMemo ` 、` useReducer ` 或 ` useEffect ` 的函数内部调用 Hooks 。
43
- * 🔴 不要在 ` try ` /` catch ` /` finally ` 块中调用 Hooks 。
38
+ * 🔴 不要在条件或循环中调用 Hook 。
39
+ * 🔴 不要在条件 ` return ` 语句之后调用 Hook 。
40
+ * 🔴 不要在事件处理程序中调用 Hook 。
41
+ * 🔴 不要在类组件中调用 Hook 。
42
+ * 🔴 不要在传递给 ` useMemo ` 、` useReducer ` 或 ` useEffect ` 的函数内部调用 Hook 。
43
+ * 🔴 不要在 ` try ` /` catch ` /` finally ` 块中调用 Hook 。
44
44
45
45
如果你违反了这些规则,你可能会看到以下错误:
46
46
@@ -109,18 +109,18 @@ function Bad() {
109
109
110
110
<Note >
111
111
112
- [ 自定义 Hooks ] ( /learn/reusing-logic-with-custom-hooks ) * 可以* 调用其他 Hooks (这就是它们的目的)。因为自定义 Hooks 也只能在函数组件渲染时被调用。
112
+ [ 自定义 Hook ] ( /learn/reusing-logic-with-custom-hooks ) ** 可以** 调用其他 Hook (这就是它们的目的)。因为自定义 Hook 也只能在函数组件渲染时被调用。
113
113
114
114
</Note >
115
115
116
116
---
117
117
118
- ## 只在 React 函数中调用 Hooks {/* only-call-hooks-from-react-functions* /}
118
+ ## 只在 React 函数中调用 Hook {/* only-call-hooks-from-react-functions* /}
119
119
120
- 不要在常规的 JavaScript 函数中调用 Hooks 。相反,你可以:
120
+ 不要在常规的 JavaScript 函数中调用 Hook 。相反,你可以:
121
121
122
- ✅ 在 React 函数组件中调用 Hooks 。
123
- ✅ 在 [ 自定义 Hooks ] ( /learn/reusing-logic-with-custom-hooks#extracting-your-own-custom-hook-from-a-component ) 中调用 Hooks 。
122
+ ✅ 在 React 函数组件中调用 Hook 。
123
+ ✅ 在 [ 自定义 Hook ] ( /learn/reusing-logic-with-custom-hooks#extracting-your-own-custom-hook-from-a-component ) 中调用 Hook 。
124
124
125
125
遵循这个规则,你可以确保组件中的所有有状态逻辑在其源代码中清晰可见。
126
126
0 commit comments