Step 1 of 2
How much React do you already have?
Be honest, nobody is watching. This only decides which chapters come first. Every chapter stays open to you either way.
Part 1 of 3
Beginner
“I can build a working screen.”
12 chapters~50 min46 exercises
Start with a component on the page. JSX, props, state and the handful of hooks that cover almost everything you'll build before anything else matters.
It opens with
- B1Project setup & JSX5 min
- B2Thinking in React3 min
- B3Components & composition4 min
- B4Props4 min
and 7 more chapters below
This is you if
- You know JavaScript basics (functions, arrays, objects)
- You haven't built a real component tree yet
- You want the core loop — render, state, event — once, in order
Part 2 of 3
Intermediate
“I understand why it re-renders.”
23 chapters~1 h 39 min66 exercises
You know the hooks. Now learn the machinery underneath: refs, context, routing, memoisation, and the fetching patterns that don't race themselves.
It opens with
- I1useRef3 min
- I2Context API3 min
- I3useReducer5 min
- I4Custom hooks3 min
and 18 more chapters below
This is you if
- Comfortable with props, state and the basic hooks
- You've hit a stale-closure or an infinite effect loop and guessed your way out
- You want real apps — routing, forms at scale, server state
Part 3 of 3
Advanced
“I can reason about the render tree and the server boundary.”
24 chapters~2 h 11 min54 exercises
Reconciliation, concurrent rendering, Server Components, and the patterns behind every component library you've ever imported.
It opens with
- A1Reconciliation & Fiber7 min
- A2Concurrent features6 min
- A3Suspense & code splitting6 min
- A4Server Components7 min
and 19 more chapters below
This is you if
- You can already explain hooks, context and memoisation
- You debug re-render storms and hydration mismatches, not just bugs
- You want the why under Suspense, RSC and the compiler
Every stop on the way
Everything each level eventually covers. Solid cards are written and open to read, dashed ones are still on the desk.
Beginner
“I can build a working screen.”
11 chapters written
- Project setup & JSXJSX is not HTML and it is not a template language — it is a function call wearing a costume.
- Thinking in ReactTurning a picture into a component tree — the step that happens before you type anything.
- Components & compositionA component is a function that takes data and returns a description of a screen.
- PropsData flows down. A component can read its props and must never write to them.
- State with useStateState is memory between renders — and setting it is a request, not an assignment.
- Events & conditional renderingPass the function, do not call it — and know why && puts a zero on your page.
- Lists with .map() and keysA key is not for you and it is not for performance — it tells React which item is which.
- Controlled formsThe input shows what state says, and typing asks state to change.
- useEffect basicsFor synchronising with something outside React — and most of the time you do not need it.
- Lifting state up & basic stylingWhen two components need the same value, it belongs to the one above both of them.
- Guided project: a task boardEvery beginner chapter, in one app built end to end.
Checkpointyou can build a small app (forms, a list, a fetch call) from a blank Vite project without copying a tutorial.
Intermediate
“I understand why it re-renders.”
22 chapters written
- useRefA box that survives renders and does not cause them.
- Context APIA way to skip the middle layers — not a state manager, and not free.
- useReducerWhen the next state depends on the current state and on which thing happened.
- Custom hooksSharing stateful logic between components — not sharing the state itself.
- Effects in depthStale closures, the dependency array as a contract, and the effects that should not exist.
- React RouterThe URL is state your users can bookmark, share and go back to.
- State architectureMost React problems are state in the wrong place, in the wrong shape, or duplicated.
- Memoisationmemo, useMemo and useCallback are a cache — and a cache you did not measure is a cost.
- Error boundaries, portals & keys in depthContaining a crash, escaping the DOM tree, and using keys on purpose.
- Data fetching patternsEvery bug in hand-rolled fetching is one of five, and they are all solved problems.
- Auth in ReactProtected routes, token refresh, and the redirect that sends people back where they were.
- Forms at scaleWhere hand-rolled state stops paying, and what a form library actually buys you.
- State management librariesWhat a store gives you that context cannot: selectors.
- Server state with TanStack QueryTreat API data as a cache you do not own, and most of your state problems disappear.
- Testing ReactTest what a user can do. A test that breaks on a refactor was protecting the wrong thing.
- TypeScript with ReactProps are a function's parameters, so typing a component is typing a function.
- Animation and transitionsCSS first, a library when you need interruption, and the one case React makes hard.
- End-to-end testingThe tests that run the real app in a real browser — and why you want few of them.
- InternationalisationTranslating strings is the easy third. Plurals, formats and layout direction are the rest.
- File uploadsA file input works without any of your code. Progress, drag and drop and large files are what you add.
- Real-time UIPolling, Server-Sent Events or a WebSocket: choose the smallest thing that works, then handle the connection dropping.
- shadcn/uiNot a component library you install, but components whose source you copy into your project and own.
Checkpointyou can build a routed, tested app with a real data-fetching library and explain every re-render in it.
Advanced
“I can reason about the render tree and the server boundary.”
23 chapters written
- Reconciliation & FiberRender is a pure, interruptible calculation. Commit is a synchronous mutation. Everything follows from that split.
- Concurrent featuresTelling React which updates can wait — so the urgent one never queues behind them.
- Suspense & code splittingDeclaring where a loading state lives, instead of threading one through every component.
- Server ComponentsComponents that run once, on the server, and ship no JavaScript at all.
- Server ActionsA function that runs on the server, called from the client, with no API route in between.
- The use() hookReading a promise or a context during render — and the only hook that breaks the rules.
- Rendering strategiesWhere the HTML is produced, and when — the decision that shapes everything downstream.
- Effect timingFour hooks that all run 'after render', at four different moments.
- useSyncExternalStoreThe correct way to read state that lives outside React.
- Refs in depthForwarding, imperative handles, and integrating libraries that own their own DOM.
- Advanced component patternsThe four shapes behind every component library you have imported.
- Performance workMeasure, find the actual cost, fix the structure. Memoisation is the last step, not the first.
- AccessibilitySemantics first, keyboard second, ARIA last — and focus management is the part React makes harder.
- Design systemsConstraints that make the common thing easy and the inconsistent thing hard.
- Advanced TypeScript with ReactMaking the wrong call fail to compile, rather than fail in review.
- Architecture at scaleOrganising by feature, drawing boundaries, and the decisions that are hard to reverse.
- Custom renderersReact is not a DOM library. The DOM is one target among several.
- Migrating and upgradingNobody rewrites a working application. The skill is moving it while it keeps shipping.
- Debugging in productionThe bug is on someone else's device, on a network you cannot reproduce.
- Reviewing React, and knowing when not to use itAt this level you are judged on what you notice in someone else's code, and on what you argue against.
- State machines and XStateWhen a screen has modes, list the modes and the events each one accepts, instead of guessing from booleans.
- Feature flagsDeploying code and releasing it are different decisions, and a flag is what separates them.
- React interview bankForty-six questions split by level, and twenty output drills.
Checkpointyou can profile a slow tree in React DevTools, explain the client/server component boundary, and defend a component-library API with tradeoffs.
Three honest notes
Hooks rules and stale closures are where most intermediate bugs actually live — they sit right after custom hooks, not off in a footnote.
Server Components, Server Actions and the use() hook are 2024+ React — they only make sense once rendering strategies (SSR/SSG/streaming) already do.
Accessibility and performance profiling aren't optional at the advanced tier — they're usually what a senior React review actually checks.