Notes

useCallback 的实现原理是什么

结论:useCallback(fn, deps) 本质是“带 deps 的缓存”:如果 deps 没变就返回上一次的函数引用;实现上可以理解为 useMemo(() => fn, deps)

1. 运行时做了什么(概念)

  • mount:保存 { callback: fn, deps }
  • update:用 Object.is 逐项比较 deps
    • 相同:返回旧 callback
    • 不同:保存新 callback 并返回它

2. 常见误区

  • useCallback 不是“让函数不创建”,而是“让引用稳定”
  • 引用稳定≠一定性能更好:deps 计算/比较也有成本,别过度使用

3. 什么时候有用

  • 配合 React.memo/useMemo 作为稳定依赖,避免子组件不必要渲染
  • 作为订阅/事件解绑的稳定 handler

关联阅读

cd ..