React Hooks 性能优化实战:useCallback vs useEffect 解析

useCallback vs useEffect 的区别

1. useCallback 的作用

javascript 复制代码
const doFaceAuth = useCallback(() => {
  // 函数体
}, [dependencies]);
  • 目的缓存函数引用,避免每次渲染都创建新函数
  • 返回值 :返回一个函数
  • 执行时机不会自动执行,需要手动调用
  • 使用场景:作为事件处理器、传递给子组件的 props

2. useEffect 的作用

javascript 复制代码
useEffect(() => {
  // 副作用代码
}, [dependencies]);
  • 目的执行副作用(API调用、DOM操作、订阅等)
  • 返回值无返回值
  • 执行时机自动执行(组件挂载、依赖变化时)
  • 使用场景:数据获取、事件监听、清理工作

什么时候用 useEffect

✅ 适合 useEffect 的场景

javascript 复制代码
// 1. 数据获取
useEffect(() => {
  const fetchData = async () => {
    const res = await http.post('/api/wx/register/info/checkPharmacist');
    setPharmacist(res.data?.info);
  };
  fetchData();
}, []);

// 2. 事件监听
useEffect(() => {
  const handleResize = () => console.log('窗口大小变化');
  window.addEventListener('resize', handleResize);
  return () => window.removeEventListener('resize', handleResize);
}, []);

// 3. 定时器
useEffect(() => {
  const timer = setInterval(() => {
    console.log('定时执行');
  }, 1000);
  return () => clearInterval(timer);
}, []);

什么时候用 useCallback

✅ 适合 useCallback 的场景

javascript 复制代码
// 1. 事件处理器
const handleClick = useCallback(() => {
  console.log('用户点击了');
}, [someState]);

// 2. 传递给子组件的函数
const handleSubmit = useCallback((data) => {
  submitData(data);
}, [submitData]);

// 3. 依赖其他状态的函数
const calculateResult = useCallback(() => {
  return value1 + value2;
}, [value1, value2]);

总结

特性 useCallback useEffect
目的 缓存函数引用 执行副作用
执行 手动调用 自动执行
返回值 函数
适用场景 事件处理器、props传递 数据获取、监听、清理
相关推荐
anOnion2 小时前
构建无障碍组件之Menu Button pattern
前端·html·交互设计
用户47949283569152 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
zhangxingchao5 小时前
Kotlin常用的Flow 操作符整理
前端
IT_陈寒6 小时前
React的useState居然还有这种坑?我差点删库跑路
前端·人工智能·后端
Pedantic7 小时前
SwiftUI 手势笔记
前端·后端
橙子家8 小时前
浏览器缓存之【结构化数据库与缓存】: IndexedDB、Cache storage 和 Storage buckets
前端
user20585561518138 小时前
X6 中边悬浮置顶,规避 `mouseleave` 事件丢失问题
前端
李明卫杭州8 小时前
CSS aspect-ratio 属性完全指南
前端
Pedantic10 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端