Dev.Lib
arrow_backBack to Blogs
LEVEL_044.3June 27, 20261 min read

Referential equality

State & Data Flow

`React.memo`, `useMemo`, selectors use `===` — new object each render defeats memoization even if values equal.

Summary

React.memo, useMemo, selectors use === — new object each render defeats memoization even if values equal. Stabilize object/array props with memoization or hoist constants. TanStack Query structural sharing preserves references when data unchanged. Debug with why-did-you-render or React DevTools.

Code example

const Chart = memo(function Chart({ data, onSelect }) {
  return <canvas ref={(c) => draw(c, data)} />;
});

// Parent must stabilize props:
const handleSelect = useCallback((id) => select(id), [select]);

Key points

  • React.memo, useMemo, selectors use === — new object each render defeats memoization even if values equal.
  • Stabilize object/array props with memoization or hoist constants.
  • TanStack Query structural sharing preserves references when data unchanged.
  • Debug with why-did-you-render or React DevTools.

Further reading

Related concepts