Start here. This is the direct spoken answer to practice first.
Overview
Memoization can skip work, but it also adds comparisons, dependencies, and cognitive cost that may not repay themselves.
memo can skip a component render when its props are unchanged, useMemo caches a calculated value, and useCallback caches a function identity. I use them when profiling shows repeated expensive work or unstable props are breaking a valuable memoized boundary. They are performance optimizations, not correctness tools, and state or context changes can still rerender a memoized component.