Ace your React interviews with 100+ topics on hooks, state management, design patterns, React Router, performance optimization, testing, and advanced concepts like Server Components and Suspense.

Fundamentals15 topics

beginner

JSX and the Virtual DOM

Understand how JSX compiles to JavaScript and why React uses a virtual DOM to update the UI efficiently.

jsxvirtual-domreconciliationcore-concepts
beginner

Function Components

Understand what a function component is and why it became the standard way to write React UI.

function-componentshookscore-concepts
beginner

Props and Component Composition

Learn how data flows into components via props and how composition builds complex UIs from simple pieces.

propscompositionchildrencore-concepts
beginner

State Basics with useState

Understand how component-local state works, how updates trigger re-renders, and common pitfalls with the useState hook.

usestatestatere-rendercore-concepts
beginner

Keys and List Rendering

Understand why React requires keys for list items and how incorrect keys cause subtle bugs.

keyslistsreconciliationcore-concepts
beginner

Conditional Rendering Patterns

Learn the idiomatic ways to render UI conditionally in JSX and the tradeoffs between each approach.

conditional-renderingjsxcore-concepts
beginner

Lifting State Up

Learn the pattern of moving shared state to the closest common ancestor so sibling components can stay in sync.

statelifting-statecompositioncore-concepts
beginner

Fragments

Learn why Fragments exist and how they let components return multiple elements without adding extra DOM nodes.

fragmentsjsxcore-concepts
beginner

Event Handling in React

Understand React's synthetic event system and how it differs from native DOM events.

eventssynthetic-eventscore-concepts
beginner

Controlled vs Uncontrolled Components

Understand the difference between form elements driven by React state versus those managed by the DOM itself.

controlled-componentsuncontrolled-componentsformscore-concepts
beginner

Component Lifecycle Concepts (Mount, Update, Unmount)

Understand the three phases of a component's life and how they map from class lifecycle methods to hooks.

lifecycleuseeffectmount-unmountcore-concepts
beginner

Strict Mode and Development Warnings

Understand what React.StrictMode does in development and why effects may run twice.

strict-modedevelopmentdebuggingcore-concepts
intermediate

React Fiber Architecture

Understand the internal reconciliation engine that powers rendering, scheduling, and interruption in modern React.

fiberreconciliationinternalsarchitecture
beginner

Rendering Lists and the map() Pattern

Learn the standard pattern for turning arrays of data into arrays of elements in JSX.

listsmaparrayscore-concepts
intermediate

Portals

Learn how React Portals let you render children into a DOM node outside the parent component's hierarchy.

portalsmodalsdomadvanced-rendering

Hooks15 topics

beginner

useEffect Fundamentals

Learn how useEffect synchronizes a component with external systems and how the dependency array controls when it runs.

useeffectside-effectshooks
beginner

useRef for Mutable Values and DOM Access

Understand how useRef provides a persistent mutable container that doesn't trigger re-renders, and how it's used to access DOM nodes.

userefdom-refshooks
intermediate

useMemo for Expensive Computations

Learn how useMemo caches the result of an expensive calculation between renders to avoid redundant work.

usememomemoizationperformancehooks
intermediate

useCallback for Stable Function References

Learn how useCallback memoizes a function reference across renders to avoid unnecessary child re-renders or effect reruns.

usecallbackmemoizationperformancehooks
intermediate

Custom Hooks for Logic Reuse

Learn how to extract stateful logic into reusable custom hooks that follow React's naming and rules conventions.

custom-hookslogic-reusehooks
beginner

useContext for Consuming Context

Learn how useContext lets a component read a value from the nearest matching Provider without prop drilling.

usecontextcontextprop-drillinghooks
intermediate

useReducer for Complex State Logic

Learn when useReducer is a better fit than useState for managing state transitions with multiple related fields or actions.

usereducerstate-managementhooks
intermediate

useLayoutEffect vs useEffect

Understand the timing difference between useLayoutEffect and useEffect, and when the synchronous variant is necessary.

uselayouteffectuseeffectdom-timinghooks
beginner

Rules of Hooks

Understand the two rules that govern how hooks must be called, and why they exist.

rules-of-hookseslinthooks
advanced

useImperativeHandle and forwardRef

Learn how to expose a controlled imperative API from a child component to a parent via refs.

forwardrefuseimperativehandlerefshooks
intermediate

useId for Accessible Unique IDs

Learn how useId generates stable, unique identifiers for accessibility attributes without mismatching between server and client.

useidaccessibilityssrhooks
advanced

useTransition and Concurrent Updates

Learn how useTransition marks state updates as low priority so urgent interactions like typing stay responsive.

usetransitionconcurrent-reactperformancehooks
advanced

useDeferredValue

Learn how useDeferredValue lets a slow-to-render part of the UI lag behind a fast-changing value without blocking input.

usedeferredvalueconcurrent-reactperformancehooks
advanced

useSyncExternalStore

Learn how useSyncExternalStore safely subscribes React components to external, mutable data sources under concurrent rendering.

usesyncexternalstoreconcurrent-reactexternal-storeshooks
intermediate

Stale Closures in Hooks

Understand why hooks can capture outdated values in their closures and the common ways to avoid or intentionally leverage this.

stale-closuresuseeffectdebugginghooks

State12 topics

intermediate

Context API Deep Dive

Go beyond basic useContext to understand provider composition, value stability, and performance implications at scale.

contextprovider-patternperformancestate
intermediate

Redux Toolkit Fundamentals

Learn how Redux Toolkit simplifies classic Redux with slices, createAsyncThunk, and built-in Immer-based mutation syntax.

redux-toolkitreduxstate-managementstate
intermediate

Zustand for Lightweight State Management

Learn how Zustand provides a minimal, hook-based global state store without providers or boilerplate.

zustandstate-managementstate
intermediate

Redux vs Context API vs Zustand

Compare the three most common approaches to shared state in React and know when each is the right tool.

state-management-comparisonreduxcontextzustandstate
intermediate

Selectors and Derived State

Learn how to compute derived values from state efficiently, whether in Redux, Zustand, or plain component state.

selectorsderived-statereduxstate
advanced

Normalizing State Shape

Learn why flattening nested, relational data into normalized entities improves update performance and avoids duplication.

normalizationreduxentity-adapterstate
intermediate

Async Data Fetching with React Query / TanStack Query

Learn how server-state libraries like TanStack Query handle caching, background refetching, and deduplication that plain useEffect fetching doesn't.

react-querytanstack-queryserver-statedata-fetchingstate
beginner

State Colocation

Learn the principle of keeping state as close as possible to where it's used, lifting it only when truly necessary.

state-colocationarchitectureperformancestate
intermediate

URL as State (Search Params and Routing State)

Learn when to store UI state in the URL instead of component state, and how it improves shareability and persistence.

url-statereact-routersearch-paramsstate
beginner

Immutability and Why React Cares

Understand why React state updates require new objects/arrays rather than in-place mutation, and how this connects to change detection.

immutabilitystatereference-equalitycore-concepts
intermediate

Immer for Ergonomic Immutable Updates

Learn how Immer lets you write mutation-style code that produces safe, immutable state updates behind the scenes.

immerimmutabilitystate
advanced

Jotai and Atomic State Management

Learn the atomic state model, where state is composed from small independent units rather than one large store or tree.

jotaiatomic-statestate-managementstate

Patterns12 topics

advanced

Compound Components

Learn how compound components share implicit state between a parent and its children via context, giving a flexible, declarative API.

compound-componentscontextcomponent-apipatterns
intermediate

Render Props Pattern

Learn how the render props pattern shares logic by passing a function as a prop that returns JSX.

render-propslogic-reuselegacy-patternspatterns
intermediate

Higher-Order Components (HOCs)

Learn how higher-order components wrap a component to inject additional props or behavior, and why hooks replaced most use cases.

hocshigher-order-componentslegacy-patternspatterns
beginner

Container/Presentational Component Split

Learn the classic pattern of separating data-fetching and logic (containers) from pure rendering (presentational components).

container-presentationalcomponent-architecturepatterns
beginner

Composition over Inheritance

Understand why React favors composing components together rather than building class hierarchies to share behavior.

compositioncomponent-architecturepatterns
intermediate

Controlled Components at Scale (Form Composition)

Learn how to compose multiple controlled fields into a larger form structure without prop-drilling every handler individually.

controlled-componentsformspatterns
intermediate

Slot / Children-as-Function Pattern

Learn the pattern of passing children as a function to expose internal state directly at the usage site, without a separate render prop name.

render-propschildren-functionpatterns
advanced

Prop Getters Pattern

Learn the prop getters pattern used by headless UI libraries to bundle correct accessibility and event-handling props onto elements.

prop-gettersheadless-uicomponent-apipatterns
advanced

Headless Components

Learn the philosophy of separating behavior/accessibility logic from visual presentation entirely, letting consumers own all markup and styling.

headless-componentsaccessibilitycomponent-apipatterns
intermediate

Error Boundaries as a Pattern

Learn how error boundary components catch rendering errors in their subtree and display a fallback UI instead of crashing the whole app.

error-boundariesclass-componentsresiliencepatterns
beginner

Provider Pattern for Cross-Cutting Concerns

Learn how the Provider pattern wraps an app (or subtree) to make a value or service available throughout without prop drilling.

provider-patterncontextarchitecturepatterns
intermediate

Custom Hook Composition (Hooks Calling Hooks)

Learn how custom hooks can call other custom hooks to build layered, composable abstractions for complex behavior.

custom-hookshook-compositionpatterns

Routing8 topics

beginner

React Router Fundamentals

Learn the core building blocks of React Router: routes, links, and how client-side navigation avoids full page reloads.

react-routerrouting
intermediate

Nested Routes and Layouts

Learn how nested route definitions let a shared layout render once while only the inner content changes as sub-routes change.

nested-routesreact-routerlayoutsrouting
beginner

Dynamic Route Parameters

Learn how to define routes with dynamic URL segments and read their values inside a matched component.

dynamic-routesroute-paramsreact-routerrouting
intermediate

Protected Routes and Route Guards

Learn how to restrict access to certain routes based on authentication or authorization state.

protected-routesauthenticationreact-routerrouting
beginner

Programmatic Navigation

Learn how to trigger navigation imperatively from event handlers or effects using React Router's useNavigate hook.

usenavigateprogrammatic-navigationreact-routerrouting
advanced

Data Loading with Router Loaders

Learn how React Router's data APIs let route definitions fetch their own data before rendering, decoupling data loading from component lifecycle.

react-routerdata-loadingloadersrouting
intermediate

Code Splitting Routes with Lazy Loading

Learn how to split each route's code into a separate bundle loaded on demand, reducing the app's initial load size.

code-splittinglazy-loadingreact-routerperformancerouting
beginner

Handling 404s and Catch-All Routes

Learn how to define a fallback route that matches any URL not handled by more specific routes, for a proper Not Found page.

404-handlingcatch-all-routesreact-routerrouting

Performance10 topics

intermediate

React.memo for Component Memoization

Learn how React.memo skips re-rendering a component when its props haven't meaningfully changed.

react-memomemoizationperformance
intermediate

Code Splitting with React.lazy and Suspense

Learn the general mechanism of React.lazy and Suspense for splitting any part of the component tree into separately loaded chunks.

code-splittingreact-lazysuspenseperformance
advanced

Windowing / List Virtualization

Learn how virtualization renders only the visible slice of a large list, keeping DOM size and render cost constant regardless of total item count.

virtualizationwindowinglarge-listsperformance
intermediate

Profiling with React DevTools Profiler

Learn how to use the React DevTools Profiler tab to identify which components render, how often, and why.

profilerdevtoolsperformance-debuggingperformance
intermediate

Avoiding Unnecessary Re-renders

Learn the common causes of unnecessary component re-renders and the standard techniques to prevent them.

re-rendersperformanceoptimization
advanced

The Reconciliation Diffing Algorithm

Understand the specific heuristics React's diffing algorithm uses to efficiently compare two element trees.

reconciliationdiffing-algorithminternalsperformance
intermediate

Avoiding Anonymous Functions and Objects in Render (Deep Dive)

Understand precisely when inline functions and object literals in JSX are harmless versus when they measurably hurt performance.

performanceusecallbackusememooptimization
intermediate

Bundle Size Analysis and Tree Shaking

Learn how to analyze what's contributing to a React app's bundle size and how tree shaking eliminates unused code.

bundle-sizetree-shakingwebpackperformance
beginner

Debouncing and Throttling in React

Learn how to limit the rate of expensive operations triggered by fast-firing events like typing, scrolling, or resizing.

debouncingthrottlingperformance
advanced

Web Vitals and Measuring Real User Performance

Learn the key Core Web Vitals metrics relevant to React apps and how to measure them in production.

web-vitalsperformance-monitoringcore-web-vitalsperformance

Testing8 topics

beginner

React Testing Library Philosophy

Understand RTL's guiding principle of testing components the way a user actually interacts with them, not their internal implementation.

react-testing-librarytesting-philosophytesting
beginner

Queries and Roles in Testing Library

Learn the priority order of Testing Library queries and why role-based queries are the recommended default.

testing-libraryqueriesaccessibilitytesting
intermediate

Mocking API Calls in Tests

Learn how to isolate component tests from real network requests using mocking tools like MSW.

mswmockingapi-testingtesting
intermediate

Testing Custom Hooks

Learn how to test custom hooks in isolation using renderHook without needing a full component to host them.

testing-hooksrenderhooktesting
beginner

Snapshot Testing

Understand what snapshot tests capture, their legitimate uses, and why they're easy to misuse as a substitute for real assertions.

snapshot-testingjesttesting
intermediate

Testing Asynchronous Components with findBy and waitFor

Learn how to correctly test components that update after an asynchronous operation, without relying on arbitrary timeouts.

async-testingfindbywaitfortesting
intermediate

Testing Context Providers and Custom Render Wrappers

Learn how to test components that depend on Context by rendering them within their required providers, using a reusable custom render function.

context-testingcustom-rendertesting
intermediate

End-to-End Testing with Cypress/Playwright vs Component Testing

Understand the different layers of the testing pyramid as applied to a React app and when each tool is appropriate.

e2e-testingcypressplaywrighttesting-pyramidtesting

Advanced12 topics

advanced

React Server Components (RSC)

Understand the server/client component split introduced with React Server Components and what problem it solves.

react-server-componentsrscssradvanced
advanced

Suspense for Data Fetching

Learn how Suspense extends beyond code splitting to coordinate loading states for asynchronous data, not just lazy-loaded components.

suspensedata-fetchingconcurrent-reactadvanced
intermediate

Refs and the DOM Escape Hatch

Understand refs as React's deliberate escape hatch for imperative DOM access, and where the boundary between declarative and imperative code should sit.

refsdomdeclarative-vs-imperativeadvanced
intermediate

Portals for Modals, Tooltips, and Overlays (Applied)

Learn the practical application of Portals to build correctly-layered, accessible modal and overlay components.

portalsmodalsaccessibilityadvanced
intermediate

Refs Forwarding Through Component Layers

Learn how forwardRef enables passing a ref through an intermediate wrapper component to an inner DOM element or component.

forwardrefrefscomponent-apiadvanced
advanced

Concurrent Rendering Mental Model

Understand the shift from synchronous to concurrent rendering in React 18 and its implications for render purity.

concurrent-renderingreact-18render-purityadvanced
intermediate

The act() Testing Utility and Why It Matters

Understand what act() does under the hood and why React testing utilities require wrapping state updates in it.

acttesting-utilitiestestingadvanced
advanced

Hydration and Hydration Mismatches

Understand how React attaches interactivity to server-rendered HTML, and why mismatches between server and client output cause errors.

hydrationssrhydration-mismatchadvanced
advanced

React 19 Actions and Form Status Hooks

Learn how React 19's Actions, useActionState, and useFormStatus streamline handling async form submissions and pending states.

react-19actionsuseactionstateuseformstatusadvanced
intermediate

Class Components and Legacy Lifecycle Methods

Understand class component lifecycle methods for maintaining legacy codebases, and how they map conceptually to hooks.

class-componentslifecycle-methodslegacyadvanced
intermediate

TypeScript with React: Typing Props, State, and Hooks

Learn the common TypeScript patterns for typing function components, props, hooks, and event handlers in React.

typescripttyped-propstyped-hooksadvanced
advanced

Migrating a Class Component Codebase to Hooks

Learn a practical, incremental strategy for migrating a legacy class-component-based React codebase to function components and hooks.

migrationclass-componentshookslegacyadvanced