React.memo, useMemo, and useCallback let you skip unnecessary work by caching component output, computed values, and function references between renders.
React re-renders a component whenever its parent re-renders, even if the component's own props have not changed. Memoization APIs give you tools to opt out of this default behavior when the cost is measurable.
React.memo wraps a component and shallow-compares incoming props against the previous props. If all props are equal by Object.is, React reuses the last render output and skips the component function entirely.
useMemo caches a computed value between renders. It accepts a factory function and a dependency array; the factory only re-runs when at least one dependency changes. useCallback is a shorthand for memoizing a function reference.
Interview framing: define Memoization in one sentence, then explain one concrete runtime behavior and one common pitfall with a short code example.