React

梗概

回调函数中不要直接使用状态(state)是 useCallback 使用的最佳实践之一,这样可以避免不必要的依赖项声明,简化代码并提高性能。

使用说明

回调函数中不使用 state 的优势

  • 使用 useCallback 时,不需要将 state 添加到依赖数组中
  • 减少因 state 变化导致的回调函数重新创建
  • 简化依赖数组管理,降低遗漏依赖的风险

实例比较

不推荐做法

const Component = () => {
  const [count, setCount] = useState(0);
  
  // 不推荐:回调函数内部直接使用状态
  const handleClick = useCallback(() => {
    const newCount = count + 1;
    setCount(newCount);
  }, [count]); // 必须添加 count 作为依赖
  
  return <button onClick={handleClick}>增加</button>;
};

推荐做法

const Component = () => {
  const [count, setCount] = useState(0);
  
  // 推荐:使用函数式更新,不依赖外部 state
  const handleClick = useCallback(() => {
    setCount(prevCount => prevCount + 1);
  }, []); // 空依赖数组,回调函数不会重新创建
  
  return <button onClick={handleClick}>增加</button>;
};

相关概念

  • 函数式更新:React 的 setState 和 useState 的更新函数可以接收一个函数,该函数以先前的状态作为参数并返回更新后的状态
  • 闭包陷阱:在依赖项不完整时,回调函数可能会捕获到过时的状态值