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