一、Hooks的核心优势
- 简化代码 :消除类组件的
this
绑定问题和生命周期方法的复杂性,代码量平均减少40%6 - 逻辑复用:通过自定义Hooks实现状态逻辑的跨组件复用,避免高阶组件(HOC)的嵌套地狱9
- 函数式编程:更符合React"视图=函数(数据)"的设计哲学,便于拆分和测试
二、基础Hooks使用
1. useState
管理组件内部状态的基本Hook:
javascriptCopy Code
import { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); // 初始值0 return <button onClick={() => setCount(c => c + 1)}>{count}</button>; }
- 参数:初始状态值
- 返回值:当前状态和更新函数组成的数组25
2. useEffect
处理副作用(数据获取、订阅等):
javascriptCopy Code
useEffect(() => { document.title = `点击${count}次`; return () => { /* 清理函数 */ }; }, [count]); // 依赖数组
- 无依赖数组:每次渲染后执行
- 空数组
[]
:仅挂载时执行 - 含依赖项:依赖变化时执行36
三、进阶Hooks
- useContext:跨组件共享数据,替代Prop Drilling10
- useReducer:复杂状态逻辑管理,类似Redux的简化版8
- useMemo/useCallback:性能优化,避免不必要的计算和渲染5
四、使用规则
- 只在顶层调用:不在循环/条件中使用Hooks25
- 仅在React函数中调用:包括组件和自定义Hooks4
- 保持调用顺序一致:确保每次渲染时Hook执行顺序相同
五、学习路径建议
- 先掌握
useState
和useEffect
(覆盖80%用例)1 - 再学习
useContext
实现跨组件通信7 - 最后通过
useReducer
处理复杂状态逻辑8 - 实践自定义Hooks封装可复用逻辑9
注意:Hooks完全向后兼容,现有项目可逐步迁移,无需重写类组件