Dev.Lib
arrow_backBack to Blogs
LEVEL_022.9June 27, 20261 min read

Tearing in concurrent UI

React & Rendering

Tearing — UI shows mixed versions of external store during concurrent render (e.g.

Summary

Tearing — UI shows mixed versions of external store during concurrent render (e.g. legacy Redux subscription). useSyncExternalStore forces consistent snapshot per render. TanStack Query / modern libraries handle this; ad-hoc global mutable stores may not. Symptom: flickering values, inconsistent list order during fast updates.

Code example

import { useSyncExternalStore } from 'react';

function useStoreValue(store) {
  return useSyncExternalStore(
    store.subscribe,
    store.getSnapshot,
    store.getServerSnapshot,
  );
}

Key points

  • Tearing — UI shows mixed versions of external store during concurrent render (e.g.
  • legacy Redux subscription).
  • useSyncExternalStore forces consistent snapshot per render.
  • TanStack Query / modern libraries handle this; ad-hoc global mutable stores may not.
  • Symptom: flickering values, inconsistent list order during fast updates.

Further reading

Related concepts