React

React Application Development

Build real, componentized user interfaces with React: state, effects, data fetching, custom hooks, accessibility, and a maintainable project structure.

intermediate14 lessons6 modules8h total

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 course

Practice 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.

  1. 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.

    18 min
  2. 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.

    20 min
  3. 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.

    18 min

Interaction and state

Giving components memory, responding to events, and rendering lists safely.

  1. 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.

    17 min
  2. 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.

    22 min
  3. 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.

    19 min

Forms and UI states

Controlled, validated forms, and the four states real data-driven UI must handle.

  1. 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.

    30 min
  2. 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.

    18 min

Effects and data loading

Synchronizing with the outside world, and fetching data without race conditions.

  1. 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.

    20 min
  2. 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.

    32 min

Reuse and maintainability

Composition versus custom hooks, and deciding where state and Context genuinely belong.

  1. 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
  2. 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.

    20 min

Production fundamentals

Accessibility, testing, memoization, error boundaries, and refactoring for maintainability.

  1. 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.

    20 min
  2. 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.

    32 min

Where to go next

Optional -- these build well on what you just learned, but any course can come next.