--- title: Extract to Memoized Components impact: MEDIUM impactDescription: 支持提前返回 tags: rerender, memo, useMemo, optimization --- ## 提取为记忆化组件 将耗时工作提取为记忆化组件,以便在计算前支持提前返回。 **错误做法(即使在加载时也会计算头像):** ```tsx function Profile({ user, loading }: Props) { const avatar = useMemo(() => { const id = computeAvatarId(user) return }, [user]) if (loading) return return
{avatar}
} ``` **正确做法(加载时跳过计算):** ```tsx const UserAvatar = memo(function UserAvatar({ user }: { user: User }) { const id = useMemo(() => computeAvatarId(user), [user]) return }) function Profile({ user, loading }: Props) { if (loading) return return (
) } ``` **注意:** 如果你的项目已启用 [React Compiler](https://react.dev/learn/react-compiler),则无需手动使用 `memo()` 和 `useMemo()` 进行记忆化。编译器会自动优化重渲染。