React
React Application Development
Build real, componentized user interfaces with React: state, effects, data fetching, custom hooks, accessibility, and a maintainable project structure.
Helpful before you begin (optional -- you can start this course now): TypeScript Foundations
Who it's for
Developers comfortable with JavaScript (and ideally TypeScript) who want to build real, interactive user interfaces rather than static pages, and understand what React is actually doing underneath its syntax.
What you'll be able to do
- Decompose a UI into well-scoped, reusable components and explain what JSX compiles to
- Manage interactive state correctly, including the functional-update form and stable list keys
- Build controlled, validated forms and handle loading/error/empty/success states explicitly
- Synchronize with external systems using effects, including cleanup and race-condition guards for data fetching
- Extract reusable logic into custom hooks and make deliberate state-ownership and Context decisions
- Apply accessibility, testing, memoization, and error-boundary practices to ship a maintainable component
Not started — 14 lessons, no account required.
Start this coursePractice this course →Add to a study plan →Interview questions →
React foundations
Component thinking, what JSX actually compiles to, and one-way data flow through props.
- 18 min
Component Thinking: Breaking a UI into Pieces
Before any JSX or syntax, the actual skill React rewards: decomposing an interface into small, single-purpose, reusable pieces.
- 20 min
JSX and Rendering: UI as an Expression
JSX is not magic markup — it's syntax sugar for plain function calls. Understanding the function calls it compiles to demystifies almost everything that confuses beginners about it.
- 18 min
Props: Passing Data Down, One Way
Props are how a parent configures a child — read-only, one direction, always. Understanding why that constraint exists prevents an entire category of confusing bugs.
Interaction and state
Giving components memory, responding to events, and rendering lists safely.
- 17 min
Handling Events in React
How a click becomes a function call: passing handler functions as props, and the difference between calling a function and passing a reference to one.
- 22 min
State: Giving Components Memory
Why a plain variable doesn't survive a re-render, and what useState actually does underneath — built by hand, once, so it stops feeling like magic.
- 19 min
Conditional Rendering, Lists, and Stable Keys
Rendering different UI based on a condition, rendering a list from an array, and the one rule about list keys that prevents real, hard-to-diagnose bugs.
Forms and UI states
Controlled, validated forms, and the four states real data-driven UI must handle.
- 30 min
Controlled Forms and Validation
A controlled input keeps React's state as the single source of truth for form data. Build a real, validated signup form locally, with a genuine React project running on your own machine.
- 18 min
Loading, Empty, Error, and Success States
Every piece of asynchronous UI has at least four states. Designing for all four from the start — not just the happy path — is what separates a real component from a demo.
Effects and data loading
Synchronizing with the outside world, and fetching data without race conditions.
- 20 min
Effects: Synchronizing with the Outside World
useEffect exists to synchronize a component with something outside React — not as a general-purpose "run this after render" hook. The dependency array is the exact algorithm behind when it re-runs.
- 32 min
Fetching Data: Races, Stale Responses, and Cleanup
The most common real bug in data-fetching components: a slower, earlier request's response arriving after a faster, later one, silently overwriting the correct data. Build a real fetch-driven component locally.
Reuse and maintainability
Composition versus custom hooks, and deciding where state and Context genuinely belong.
- 20 min
Composition and Custom Hooks
Two ways to reuse logic in React: composing components together, and extracting stateful logic into a custom hook. Knowing which tool fits which problem.
- 20 min
Context, State Ownership, and Project Organization
Where should a piece of state live? Context solves prop drilling for genuinely shared state — but reaching for it as a default answer creates its own maintenance problems.
Production fundamentals
Accessibility, testing, memoization, error boundaries, and refactoring for maintainability.
- 20 min
Accessibility and Testing React Components
Two disciplines every production component needs: making sure everyone can actually use it, and proving it works with more than a manual click-through.
- 32 min
Performance, Error Handling, and Maintainable Architecture
Memoization, error boundaries, and refactoring an oversized component into a maintainable structure — brought together in a real local refactor of a growing project.
Where to go next
Optional -- these build well on what you just learned, but any course can come next.