Back to Blog
Web Dev

React 19 Concurrent Features: What Changes for Your Codebase

Sarah Lin

Head of Design & Frontend

5 min read14.1K viewsFeb 28, 2025

React 19 ships new concurrent primitives that fundamentally change rendering strategy. Here's what you need to update, what breaks, and what you can safely ignore.

React 19 is the most significant release since React 16 introduced Hooks. The concurrent rendering model is now the default — and with it comes a new set of primitives, breaking changes, and mental models that every React engineer needs to understand.

The Compiler Is the Biggest Story

React 19 ships the React Compiler (formerly React Forget) as stable. The compiler automatically memoises components and values that would previously require manual useMemo and useCallback calls. For most codebases this means you can remove the majority of your manual memoisation.

  • Delete useMemo and useCallback calls added purely for performance — the compiler handles them.
  • Keep useMemo when you need a stable reference for useEffect dependencies.
  • The compiler warns if it cannot optimise a component — treat these as code-quality signals.

Actions and the New Form Primitives

React 19 introduces Actions — a first-class model for handling async operations triggered by user interactions. Paired with useOptimistic and the form action prop, this gives React a built-in pattern for optimistic UI updates that previously required third-party libraries or significant boilerplate.

  • useOptimistic: Apply a tentative state update immediately while an async action is in flight, then revert if it fails.
  • Form actions: Pass an async function directly to a form's action prop — React handles pending states automatically.
  • useFormStatus: Reads the pending state of the parent form without prop drilling.
  • useActionState: Manages state transitions across async action calls, replacing many useState + useEffect patterns.

What Actually Breaks

  • ref as a prop: forwardRef is no longer required — refs are now plain props. Existing forwardRef code still works but will show deprecation warnings.
  • Context: <Context.Provider> becomes just <Context>. Old syntax still compiles but will warn.
  • Strict Mode behaviour: Double-invocation now includes cleanup function calls. If effects break, they had latent bugs.

React 19 is not a rewrite — it's the decade-long thread of React's design philosophy finally making the jump from experimental to essential.

Sarah Lin

Need help upgrading your React codebase? Our frontend specialists have migrated 50+ production applications to React 18/19. Get in touch.

#React#JavaScript#Web Dev

Sarah Lin

Head of Design & Frontend · Alliance Corporation

Part of the Alliance Corporation leadership team, shaping technology strategy across AI, cloud and enterprise software for clients in 50+ countries.