Nothing Is Set in Stone — The Only Constant Is Change
Jordan Walke (Facebook) releases React 0.3.0. The initial paradigm: Class Components + React.createClass() with JSX. Mixed reception — developers questioned mixing HTML into JS.
Components can now be defined as ES6 classes. The "modern" way to write React. This becomes the standard pattern for the next 4 years.
React splits into react and react-dom packages. Introduced stateless functional components — simple functions returning JSX (no state yet).
React Fiber replaces the stack reconciler. Enables incremental rendering. Adds Error Boundaries, Portals, and fragments. Sets the stage for everything that follows.
useState, useEffect, useContext — function components can now hold state and lifecycle. Classes become legacy overnight. Shipped in a minor release, not a major. The biggest paradigm shift in React history.
First React release with no new developer-facing features. Focus: gradual upgrades, event delegation moved to root container, preparation for concurrent rendering.
Transitions, automatic batching, Suspense for SSR, createRoot. React goes concurrent — interruptible rendering for smoother UIs. Server-side streaming becomes first-class.
React Server Components (RSC), Server Actions, the use API, form hooks, and ref as a prop. Rendering moves back to the server. The client/server line blurs permanently.
The React Compiler (formerly React Forget) reaches 1.0. Automatically memoizes components — less useMemo/useCallback by hand. Also: Create React App officially sunset.
React, React Native, and JSX move to the Linux Foundation. No longer owned by Meta. Eight platinum founding members including Amazon, Microsoft, and Vercel.
Developers question SPA complexity. HTMX gains massive mindshare (72.9% admiration in Stack Overflow surveys). The "JavaScript Fatigue" tipping point — many projects adopt a return to server-rendered HTML with minimal client JS. React responds by absorbing server-side ideas via RSC.
In 13 years, React went from createClass → ES6 classes → functional components → hooks → server components → auto-memoizing compiler.
Each shift was once considered "the way forward." The community now questions the SPA paradigm itself.
There is no set-in-stone way to build UIs. What's "best practice" today is legacy tomorrow.