useCallback vs useMemo:这俩到底有什么区别?一个煮鸡蛋的故事

前端技术 Jun 4, 2026

故事的开始:你妈叫你煮鸡蛋

话说有一天你妈让你煮鸡蛋。你第一次煮,查教程、烧水、下锅、计时、过凉水,忙活半天终于煮好了。第二天你妈又让你煮鸡蛋,你又重复了一遍全部流程。这就是 useCallbackuseMemo 要解决的问题——别重复造轮子。

useMemo:记住煮好的鸡蛋

useMemo 好比你把煮好的鸡蛋放冰箱里。下次你妈喜煮鸡蛋,你直接打开冰箱拿出来就行,不用再从烧水开始。

const cookedEgg = useMemo(() => {
  return boilEgg(water, egg, 8);
}, [water, egg]);

useCallback:记住怎么煮鸡蛋

useCallback 缓存的是煮鸡蛋这个方法,不是鸡蛋本身。

const boilEggCallback = useCallback(() => {
  return boilEgg(water, egg, 8);
}, [water, egg]);

核心区别

  • useMemo 缓存计算结果 → 返回的是值(鸡蛋)
  • useCallback 缓存函数本身 → 返回的是函数(煮鸡蛋的方法)

记住口诀:useMemo 存结果,useCallback 存操作;如果你不确定,那就先别用

毕竟,程序员界有句老话:"过早优化是万恶之源"。你妈叫你煮鸡蛋,你先煮了再说,别先把厨房改造成自动化煮蛋流水线。

Tags