React 19 in Production: What Actually Changed for Real Apps
React 19 has been generally available for a year and the dust has settled. Three changes matter for real production apps; the rest is library-author territory. Actions and the use hook Form handling no longer…
React 19 has been generally available for a year and the dust has settled. Three changes matter for real production apps; the rest is library-author territory.
Actions and the use hook
Form handling no longer requires juggling loading state, pending state, and error state by hand. The new useActionState and form actions API replaces about thirty lines of boilerplate per form with a clean three-line pattern. If you maintain a CRUD app, the migration usually shrinks code.
Server Components are real now
RSC is mainstream in Next.js App Router and is the default mental model for new projects in 2026. Components that fetch data run on the server and stream HTML; interactive bits opt into the client with "use client". The result is smaller bundles and faster initial loads.
Compiler reduces useMemo and useCallback
The React Compiler memoises automatically. Most of the useMemo and useCallback calls you have written for the last five years are no longer necessary. Adopt the compiler in new code, leave the old calls alone — they still work.
What didn’t change
- State management — Zustand and Jotai are still the popular picks for non-server state.
- Styling — Tailwind continues to dominate; CSS Modules remain a solid alternative.
- Testing — Vitest and Playwright are the boring-and-correct choice.
Migration advice
If you are on React 18, the upgrade is mostly painless thanks to good codemods. The bigger jump is moving from Pages Router to App Router in Next.js, which is a refactor, not a version bump. Plan it as a project.