# React Hooks

Hooks 让函数组件拥有状态、生命周期、副作用、性能优化等能力
本质:把 class 组件能力函数化 Hooks 不是语法糖,而是 React 的函数式编程的实践

# 为什么要使用 Hooks

# Class 组件的问题

Class

  • 生命周期分散、复杂
  • this 易出错
  • 逻辑复用依赖 HOC / Render Props(嵌套深)
  • 状态与副作用耦合严重

# Hooks 的优势

Hooks

  • this
  • 逻辑内聚(相关逻辑写在一起)
  • 易复用(自定义 Hook)
  • 更贴近函数式编程

# Hooks 使用规则(铁律)

# 只能在最外层调用 Hook

TIP

不能在if条件for循环while循环普通js函数中调用Hook

# Hooks 调用顺序必须一致

TIP

React 通过Hooks的 调用顺序 关联 state

# 核心 Hooks

# useState

useState

状态管理hook。 更新状态会触发页面重新渲染。 setState 是异步、批量的。

const [state, setState] = useState(initialValue);
// 推荐
setCount(prev => prev + 1);

// 不推荐
setCount(count + 1); // 闭包旧值风险

# useEffect

useEffect

副作用管理(生命周期合体)hook。 不同依赖含义:

  • 不传:每次 render 执行
  • []: 只在页面挂载完之后执行(componentDidMount)
  • [count]: 依赖更新时执行

# useRef

useRef

返回最新对象而且不触发重新渲染。 比如存储定时器ID、避免闭包陷阱或访问DOM元素,因为它不参与 React 的状态更新机制,直接读取 .current 属性总能获取最新值

const ref = useRef(initialValue);
ref.current = value;

# useMemo

useMemo

缓存计算数据hook 当计算开销大、依赖变化少时才使用(即算的慢,才memo),不然会起到优化反作用,

# useCallback

useCallback

缓存函数引用hook 保证函数引用稳定,避免子组件不必要的重新渲染,常与React.memo 配合使用

# useContext

useContext

跨组件共享状态 为了解决props drilling问题,注意context更新会导致所有消费者组件更新。

const value = useContext(MyContext);
上次更新: 1/13/2026, 4:12:50 PM