useMemo and useCallback confuse people because the thing they fix is invisible: object and function identity. So I built a tool that makes identity visible — it stamps a number on every reference so you can watch it stay stable or change, and counts when a React.memo child actually re-renders.

▶ Live demo: https://usememo-vs-usecallback.vercel.app/

Source (React 19 + TS): https://github.com/dev48v/usememo-vs-usecallback

The one fact everything hinges on

Every time a component renders, an inline object or function is a brand-new value: