// LEARN · LANGUAGES & FRAMEWORKS
React
A practical React course from a first component to reducers, effects, forms with Actions, Suspense and Server Components. Every example is run and checked against React 19.3.
Level: Beginner to advanced · For: Developers who know basic JavaScript and want to build user interfaces with React, from a first component to a production app.
Syllabus
Beginner
Complete
After this level you can
- Build a UI from small components with JSX, props, conditional rendering and lists with stable keys
- Add interactivity with event handlers and state, and explain why state is a snapshot and how updates are batched
- Update objects and arrays in state immutably
- Create a local React project with Vite and inspect it with React Developer Tools
- Plan a UI with Thinking in React: find the minimal state, decide where it lives and lift it up
B1Quick start5 of 5 written · 5 lessonsRuns in your browser
Build a first interactive game with components, props and state
You build: Tic-tac-toe with history
B2Describing the UI6 of 6 written · 6 lessonsRuns in your browser
Compose pages from pure components
You build: A profile gallery
B3Adding interactivity6 of 6 written · 6 lessonsRuns in your browser
Respond to users and update state correctly
You build: A shopping cart
B4Setting up a project4 of 4 written · 4 lessonsRuns on your computer
Create, run and inspect a local React app
You build: A Vite project from scratch
B5Managing state6 of 6 written · 6 lessonsRuns in your browser
Structure state and share it between components
You build: A searchable product table
Beginner project
Recipe browser
A single-page app that lists, searches and filters recipes from a JSON array, with a detail view and a servings scaler, built from pure components.
Runs in your browserSelf-checked against a rubric
Open the project guideIntermediate
Coming soon
After this level you can
- Move complex state logic into a reducer and share it with context
- Use refs for values and DOM access, and write effects that synchronise with external systems, including cleanup
- Decide when an effect is not needed, and remove unnecessary effect dependencies
- Extract logic into custom hooks and subscribe to external stores with useSyncExternalStore
- Build forms with Actions, useActionState, useFormStatus and useOptimistic, and test components with Vitest and React Testing Library
I1Reducers and contextComing soon · 5 lessonsRuns in your browser
Scale state logic across a component tree
You build: A task manager
- I1.1Coming soon
- I1.2Coming soon
- I1.3Coming soon
- I1.4Coming soon
- I1.5Coming soon
I2Refs and effectsComing soon · 5 lessonsRuns in your browser
Step outside React safely with refs and effects
You build: A chat-room connection with a timer
- I2.1Coming soon
- I2.2Coming soon
- I2.3Coming soon
- I2.4Coming soon
- I2.5Coming soon
I3Effects done right and custom hooksComing soon · 6 lessonsRuns in your browser
Remove needless effects and reuse logic in custom hooks
You build: useOnlineStatus and useLocalStorage hooks
- I3.1Coming soon
- I3.2Coming soon
- I3.3Coming soon
- I3.4Coming soon
- I3.5Coming soon
- I3.6Coming soon
I4Forms and ActionsComing soon · 5 lessonsRuns in your browser
Submit data with pending, error and optimistic states
You build: An optimistic comment form
- I4.1Coming soon
- I4.2Coming soon
- I4.3Coming soon
- I4.4Coming soon
- I4.5Coming soon
I5Testing and debuggingComing soon · 5 lessonsRuns on your computer
Prove components work and find faults
You build: A test suite for the task manager
- I5.1Coming soon
- I5.2Coming soon
- I5.3Coming soon
- I5.4Coming soon
- I5.5Coming soon
Intermediate project
Kanban board
Columns and cards managed with a reducer and context, keyboard moves, persistence through a custom hook and an add-card form using Actions.
Runs on your computerSelf-checked against a rubric
Advanced
Coming soon
After this level you can
- Use Suspense, lazy, use, transitions and useDeferredValue to keep the UI responsive
- Measure rendering with the Profiler, and apply memo or the React Compiler where measurements justify it
- Explain server rendering, hydration and Server Components, and where the 'use client' and 'use server' boundaries sit
- Use React DOM APIs: portals, resource preloading, document metadata, ViewTransition and Fragment refs
- Handle errors with error boundaries, build accessible components, avoid XSS pitfalls, and type components with TypeScript
A1Suspense and concurrencyComing soon · 6 lessonsRuns in your browser
Keep the UI responsive during slow work
You build: A search page that never freezes
- A1.1Coming soon
- A1.2Coming soon
- A1.3Coming soon
- A1.4Coming soon
- A1.5Coming soon
- A1.6Coming soon
A2PerformanceComing soon · 5 lessonsBrowser and your computer
Measure first, then optimise with memo or the React Compiler
You build: Optimising a slow list
- A2.1Coming soon
- A2.2Coming soon
- A2.3Coming soon
- A2.4Coming soon
- A2.5Coming soon
A3Server rendering and Server ComponentsComing soon · 5 lessonsRuns on your computer
Render on the server and hydrate on the client
You build: A server-rendered page with a hydrated widget
- A3.1Coming soon
- A3.2Coming soon
- A3.3Coming soon
- A3.4Coming soon
- A3.5Coming soon
A4React DOM APIsComing soon · 5 lessonsRuns in your browser
Use the platform features React exposes
You build: An animated modal gallery
- A4.1Coming soon
- A4.2Coming soon
- A4.3Coming soon
- A4.4Coming soon
- A4.5Coming soon
A5Robust, accessible and typed componentsComing soon · 5 lessonsBrowser and your computer
Ship components that fail safely, work for everyone and are typed
You build: A typed, accessible form library
- A5.1Coming soon
- A5.2Coming soon
- A5.3Coming soon
- A5.4Coming soon
- A5.5Coming soon
Advanced project
Movie search with streaming results
Suspense-based loading, transitions for search input, code-split detail pages, error boundaries and a server-rendered first page.
Runs on your computerSelf-checked against a rubric
Capstone
Capstone
Accessible personal dashboard
A Vite React app in TypeScript with task, note and timer widgets, context-based settings, optimistic updates, tests and a static deployment.
Runs on your computerSelf-checked against a rubric
Sources
- React 19.3 (React blog)
- Quick Start (react.dev)
- Tutorial: Tic-Tac-Toe (react.dev)
- Your First Component (react.dev)
- Importing and Exporting Components (react.dev)
- Preserving and Resetting State (react.dev)
- Writing Markup with JSX (react.dev)
- JavaScript in JSX with Curly Braces (react.dev)
- Passing Props to a Component (react.dev)
- Conditional Rendering (react.dev)
- Rendering Lists (react.dev)
- Keeping Components Pure (react.dev)
- Understanding Your UI as a Tree (react.dev)
- Responding to Events (react.dev)
- State: A Component's Memory (react.dev)
- Render and Commit (react.dev)
- createRoot (react.dev)
- React 19 Upgrade Guide (react.dev)
- State as a Snapshot (react.dev)
- Queueing a Series of State Updates (react.dev)
- Updating Objects in State (react.dev)
- Updating Arrays in State (react.dev)
- Installation (react.dev)
- Creating a React App (react.dev)
- Build a React app from Scratch (react.dev)
- Add React to an Existing Project (react.dev)
- Getting Started (vite.dev)
- Deploying a Static Site (vite.dev)
- Features (vite.dev)
- <StrictMode> (react.dev)
- Editor Setup (react.dev)
- Rules of Hooks (react.dev)
- React Developer Tools (react.dev)
- Reacting to Input with State (react.dev)
- Choosing the State Structure (react.dev)
- Sharing State Between Components (react.dev)
- Thinking in React (react.dev)