react hook: useCallback

useCallback的主要使用场景在于优化性能,并确保当传递回调函数给子组件时,子组件不会因为父组件的重渲染而重新创建函数。

使用场景

1.当你需要将回调函数传递给子组件时,使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数。

2.如果某个函数的创建和调用频率较高,使用useCallback可以优化组件的性能。

3.作为依赖项传递给useEffect,并且这些回调函数在渲染期间没有发生变化时,使用useCallback可以确保useEffect不会因为回调函数的重新创建而触发不必要的副作用。
如果你正在编写一个 自定义 Hook,建议将它返回的任何函数包裹在 useCallback 中:这确保了 Hook 的使用者在需要时能够优化自己的代码。

javascript 复制代码
function useRouter() {
  const { dispatch } = useContext(RouterStateContext);

  const navigate = useCallback((url) => {
    dispatch({ type: 'navigate', url });
  }, [dispatch]);

  const goBack = useCallback(() => {
    dispatch({ type: 'back' });
  }, [dispatch]);

  return {
    navigate,
    goBack,
  };
}

const handleSubmit = useCallback(() => {}) 首次渲染时会创建一次,并在组件更新时,如果依赖项没有发生变化,则会返回之前创建的函数引用,而不是重新创建一个新的函数。
不能在模版循环中使用 useCallback ,但是这不被允许

为单个项目提取一个组件,然后在组件内部使用 useCallback

或者可以将组件包裹在memo 中 如果 组件props 没有更改,组件 将跳过重新渲染

相关推荐
石小石Orz2 小时前
我发现了开发者AI产品营收的新方向
前端·虚拟现实
老马识途2.03 小时前
关于跨域问题的总结
java·前端
魔力女仆3 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
别惊醒渔人4 小时前
Vue3 Diff 优化:最长递增子序列 LIS
前端·javascript·vue.js
颜酱5 小时前
07 | 把字段与指标同步到 Qdrant(生成阶段)
前端·人工智能·后端
用户059540174465 小时前
把AI长期记忆测试从手动验证换成pytest,2天揪出11个隐藏Bug
前端·css
Larcher5 小时前
从“加载模型”界面到端侧推理:拆解一个 React + WebGPU 大模型 Demo
javascript·后端
Larcher5 小时前
从状态快照到惰性初始化:读懂 React useState 的三个关键场景
javascript·人工智能·后端
lichenyang4536 小时前
从 Vite 空项目到 AIGC 图片工作台:我如何打通生图、任务轮询、生成库与 Canvas 动态特效
前端·人工智能
泡沫冰@6 小时前
上章节中文件的讲解
前端·网络·nginx