Back to Plate

React 19.2 external-store and background-ui primitives

docs/research/sources/editor-architecture/react-19-2-external-store-and-background-ui.md

53.0.63.0 KB
Original Source

React 19.2 external-store and background-ui primitives

Purpose

Compile the React 19.2 primitives that matter to the Slate v2 perf-architecture question.

Strongest evidence

  • useSyncExternalStore is the React-native primitive for stable external-store subscription.
  • useTransition marks non-blocking background work and lets urgent input interrupt it.
  • useDeferredValue lets non-urgent derived UI lag behind the urgent value.
  • Activity preserves state and DOM for hidden UI while letting hidden work run at lower priority.
  • React 19.2's official release notes describe Activity hidden mode as hiding children, unmounting effects, and deferring updates until React has idle capacity.
  • React 19.2 adds Performance Tracks for Scheduler and Components, which makes render/priority evidence easier to capture during editor stress work.

What this means

1. React 19.2 is a serious overlay/UI scheduler

For editor-adjacent UI, React now has the right primitives for:

  • external store snapshots
  • non-urgent background recompute
  • stateful hidden panes
  • stale-while-fresh derived UI

That is enough to make a React-native editor runtime architecture credible.

2. React 19.2 does not replace a core editor invalidation engine

React can schedule and subscribe. It does not invent child-scoped document mapping, dirty-node reconciliation, or view-model separation for us.

If the editor core still recomputes too broadly, React 19.2 only makes the surrounding UI smarter, not the engine magically better.

3. The current Slate v2 usage is directionally right

Local Slate v2 already uses the React 19.2-friendly posture:

  • useSlateSelector(...)
  • useSlateAnnotations(...)
  • useSlateWidgets(...)
  • useSlateProjections(...)
  • Activity for hidden panes in the large-document overlay example

That means the repo is not missing the React side of the architecture. It is missing only the deeper invalidation proof if it wants to beat the best non-React or custom-runtime engines.

Take for Slate v2

  • keep useSyncExternalStore as the subscription backbone
  • keep visible editing work urgent
  • keep hidden panes, sidebars, and review chrome on the non-urgent path
  • do not confuse “React has the right primitives” with “the editor core is already field-best”

2026-04-28 Refresh

The official React 19.2 release page confirms the relevant runtime facts:

  • Activity supports visible and hidden modes.
  • hidden Activity children keep state and can be pre-rendered without competing with visible work.
  • Scheduler and Components Performance Tracks expose what React is rendering, which priority it used, and when components render or run effects.

This keeps the Slate v2 conclusion intact: React 19.2 is strong enough for the projection and surrounding UI scheduler, but the editor still needs its own dirty-node, dirty-source, and transaction/commit runtime. If selection movement or typing dirties broad React trees, React 19.2 will expose the problem more clearly; it will not make that architecture correct.