React9h estimated

Concurrent Rendering & Suspense

Difficulty
Importance

The problem

Some UI updates are urgent (respond to typing immediately) and some aren't (re-render a big list after a filter changes) — treating every update with equal priority means a slow, low-priority update can block a fast, high-priority one, and waiting for slow data to load has traditionally meant either a blank screen or manual loading-state plumbing everywhere.

Why now

Fiber's interruptible work model made it structurally possible to pause and prioritize renders; concurrent rendering and Suspense are the features actually built on top of that possibility — turning 'renders are technically interruptible' into 'React can decide what to render first, and pause a component that isn't ready yet without you writing that logic by hand.'

Mental model

Concurrent rendering lets React prepare multiple versions of the UI and prioritize which to show — an urgent update (typing) can interrupt an in-progress, less urgent one (a big re-render) rather than waiting behind it. Suspense lets a component 'pause' rendering while it's waiting on something (usually data) by throwing a promise React catches, showing a fallback until it resolves — the same idea as a loading spinner, but handled by the rendering system itself instead of manual isLoading state threaded through every component.

Requires

Helps

Unlocks

Used in

Projects

  • Wrap an expensive list re-render in useTransition and demonstrate that typing in a search box stays responsive while the list update is deprioritized
  • Wrap a data-fetching component in a <Suspense> boundary and observe the fallback UI display automatically while the fetch is pending, with no manual isLoading state

Examples

  • Typing in a filter input stays smooth even while a 10,000-item list re-renders, because useTransition tells React the list update can be interrupted
  • <Suspense fallback={<Spinner />}><ProfilePage /></Suspense> shows the spinner automatically until ProfilePage's data dependencies resolve, without hand-written loading state

Resources

Mastery checklist