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传递 数据获取、监听、清理
相关推荐
福兮说5 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理5 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6666 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)6 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan7 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_7 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒8 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技8 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu8 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙9 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript