Stale closures are one of the most common and confusing sources of bugs in React hooks. They occur when a function captures a variable at the time it was created and does not see later updates — resulting in logic that operates on outdated state or props.
Memoization in React is a performance optimization, not a default behavior. But many codebases use useMemo and useCallback everywhere — creating overhead, obscuring intent, and sometimes preventing the optimizations they were meant to enable. Knowing when memoization helps and when it hurts is more important than knowing the API.
React Suspense changes how loading states work. Instead of managing isLoading flags in every component, you declare where loading UI should appear with Suspense boundaries, and React takes care of showing fallbacks when any child is not ready to render.
Accessibility is an implementation discipline, not a finishing pass. Semantic HTML, keyboard support, focus management, and reduced-motion preferences all have to be built into the interface from the start.
React Server Components are the most significant change to the React component model since hooks. They run exclusively on the server, have zero bundle size contribution, and enable direct access to server resources — but they come with a new mental model that takes time to internalize.
Traditional server-side rendering waits for all data to be fetched before sending any HTML. Streaming SSR changes this by sending HTML in chunks as it becomes ready, dramatically improving time to first byte and perceived performance for data-heavy pages.
Hydration is the process of attaching React's event listeners and state to server-rendered HTML. It's what makes SSR-rendered pages interactive — and when it fails, you get one of the most confusing categories of React error.
React's concurrent rendering allows multiple render tasks to be in-flight simultaneously, prioritised by urgency. It's the feature that makes your app feel responsive even while doing expensive work — and it changes how you should think about React's rendering model.
React rewrote its core rendering engine in 2017 to introduce Fiber — an architecture that enables prioritised, interruptible, and resumable rendering. Here's what changed and why it matters for modern React features.
The virtual DOM is one of the most discussed ideas in frontend development, yet the actual algorithm behind it — and why it makes tradeoffs it does — is rarely explained clearly. Here is what actually happens when React diffs two trees.
Every time state or props change, React has to figure out what actually changed in the UI and update only those parts. The process behind this decision is called reconciliation — and understanding it will change how you write components.