useMemo / useCallback 仍然有意义的场景useMemo 缓存计算结果,useCallback 缓存函数引用,目的是避免每次渲染都重复做昂贵工作或因引用变化触发子组件无谓重渲染。
const sorted = useMemo(() => [...items].sort(byPrice), [items]);
const onSubmit = useCallback((e) => save(e), [save]);React Compiler(React 19 起官方推荐)会自动为组件插入记忆化,等价于自动加 useMemo / useCallback,开发者无需手写。因此:
useMemo / useCallback 是冗余的;useMemo 更清晰可控;React.memo 子组件、useEffect 依赖);// 仍需手写:计算昂贵且结果被用于渲染
const stats = useMemo(() => computeHeavyStats(rows), [rows]);useMemo(收益 < 成本);useCallback,再把返回的函数写进 useEffect 依赖,处理不当反而引发 effect 循环执行;React 19 的口号是「默认无需记忆化」:优先用 React Compiler,仅在昂贵计算或引用稳定性是硬需求时手写。它是性能工具而非默认规范,与 11-渲染调优 的宏观优化互补。