Interactive roadmap

    React roadmap

    Learn React, the most popular library for building user interfaces.

    Your progress0% · 0 of 16 topics
    Done Learning Skipped OptionalClick any topic to learn more and mark your progress.
    1. 1

      Before you start

      0 of 2 done

      Get these right first.

      Take your time getting comfortable with modern JavaScript and basic layout skills before diving straight into React.
    2. 2

      Core React

      0 of 5 done

      The ideas everything else builds on.

      Break your user interfaces down into small, manageable pieces right from the start to make coding much easier.
    3. 3

      Hooks and data

      0 of 4 done

      Effects, data and shared state.

      Hooks let you handle side effects and share logic cleanly without writing complicated class components.
    4. 4

      Building real apps

      0 of 5 done

      Everything around the components.

      Combine your React skills with modern tooling and frameworks to build production-ready applications.

    Learn it all, with a tutor that never sleeps

    Every topic links to LevelUp lessons, practice exercises and the 24/7 AI Tutor. Your progress updates as you master lessons.

    Every topic explained

    Step 1: Before you start

    Arrow functions, destructuring, array methods, modules and promises.
    Read more

    Modern JavaScript forms the solid foundation beneath every React application you will ever build. You will rely heavily on features like arrow functions for concise code, destructuring to unpack objects cleanly, and modern array methods like map and filter.

    Think of these tools as your basic vocabulary. Just as you need grammar to speak a language fluently, you need arrow functions and array methods to manipulate data smoothly when building user interfaces.

    Mastering these concepts now prevents frustration later. When React starts feeling complex, knowing your underlying JavaScript will help you solve bugs quickly and write much cleaner code.

    • Use arrow functions for shorter syntax
    • Destructure objects and arrays easily
    • Use map and filter for data lists
    • Understand promises for asynchronous tasks
    The Modern JavaScript Tutorial
    Enough to build and style a page.
    Read more

    React ultimately outputs standard HTML and CSS to the browser screen. You need to understand semantic markup, box models, and basic layout techniques like Flexbox before building components.

    Imagine building a house where React is the plumbing and electrical work, while HTML and CSS are the walls and paint. You need to know how to structure and style a simple web page first.

    This knowledge ensures your React components look great and work well on all screen sizes, from mobile phones to large desktop monitors.

    • Know semantic HTML elements
    • Understand CSS layout with Flexbox
    • Style elements using classes and IDs
    • Ensure pages look good on mobile
    HTML reference and guides (MDN)

    Step 2: Core React

    Describing UI as small functions that return markup.
    Read more

    Components are independent, reusable pieces of user interface that return HTML-like code called JSX. Instead of writing one massive web page, you build dozens of tiny, focused building blocks.

    Think of components like Lego bricks. You might have a brick for a button, another for a navigation bar, and another for a user profile card. You snap them together to build a complete app.

    This approach matters because it keeps your code organised, makes debugging simpler, and lets you reuse the same piece of design across different pages without rewriting code.

    • Components are JavaScript functions returning JSX
    • Keep components small and focused
    • JSX combines HTML markup with JavaScript
    • Name components starting with a capital letter
    Learn React (react.dev)
    Passing data into components.
    Read more

    Props, short for properties, let you pass data from a parent component down to a child component. They act much like function arguments, allowing your reusable components to display different information.

    Imagine a reusable button component. By passing different text props into it, you can use the exact same button design for both a submit action and a cancel action.

    Props keep your components flexible and dynamic, ensuring you do not have to hardcode data directly into your user interface templates.

    • Props pass data from parent to child
    • Props are read-only inside the child
    • Use props to make components reusable
    • Access props via the component parameters
    Passing props (react.dev)
    Remembering and updating information with useState.
    Read more

    State is data that changes over time inside your component, such as whether a menu is open or what a user typed into an input field. When state updates, React automatically re-renders the screen.

    Think of state like the display on a digital stopwatch. The numbers change every second, and the screen updates to show you the current time.

    State is essential for making your web apps interactive. Without state, your pages would be completely static and unable to respond to user actions.

    • State stores changeable component data
    • Use the useState hook to manage state
    • Updating state triggers a UI re-render
    • Never modify state variables directly
    State: a component's memory (react.dev)
    Rendering arrays and showing things conditionally.
    Read more

    Modern apps constantly display lists of items, such as search results or shopping cart products. React lets you loop through arrays to render these items, using unique keys to track each one.

    Imagine a music playlist where every track needs a unique ID so the music player knows exactly which song to skip or delete without mixing up the order.

    Mastering lists and conditional rendering lets you build dynamic interfaces that adapt instantly to changing data and user choices.

    • Use the JavaScript map method for lists
    • Always provide a unique key prop
    • Show elements conditionally using logical operators
    • Handle empty states gracefully
    Rendering lists (react.dev)
    Handling input, clicks and submissions.
    Read more

    Forms allow users to interact with your app by typing text, clicking buttons, and submitting information. React handles these interactions through event listeners and controlled inputs.

    Think of a search bar on a shopping site. As you type your search query, the app captures every keystroke instantly to filter products in real time.

    Handling forms correctly is vital for user authentication, data entry, and collecting feedback safely and reliably.

    • Capture user input with event handlers
    • Control form inputs using component state
    • Prevent default browser reload on submit
    • Validate user input before sending

    Step 3: Hooks and data

    Syncing with the outside world using useEffect, and when you don't need it.
    Read more

    The useEffect hook lets your components talk to the outside world, such as loading data from an API, setting up subscriptions, or changing the document title.

    Think of an effect like setting an alarm clock. When a specific event happens or a timer goes off, your app triggers an external action in response.

    Understanding effects prevents infinite loops and memory leaks, ensuring your app synchronises smoothly with external servers and browser APIs.

    • Use useEffect for outside world sync
    • Control runs with the dependency array
    • Clean up subscriptions when unmounting
    • Avoid effects for simple data derivation
    You might not need an effect (react.dev)
    Loading, caching and refreshing server data, for example with TanStack Query.
    Read more

    Web apps often need to load information from remote servers. While you can fetch data manually using basic hooks, tools like TanStack Query handle caching, loading states, and background updates automatically.

    Imagine walking into a cafe and asking for the menu. Instead of printing a brand new menu every single time you walk in, the cafe keeps a copy on hand and checks for daily specials.

    Efficient data fetching makes your app feel lightning fast and reduces unnecessary network requests, saving mobile data for your users.

    • Load server data asynchronously
    • Handle loading and error states
    • Cache data to improve performance
    • Refetch data when windows regain focus
    TanStack Query docs
    Sharing data without passing props through every level.
    Read more

    Context allows you to share data across many components without manually passing props down through every single intermediate layer, a problem known as prop drilling.

    Think of a building intercom system. Instead of shouting a message from the top floor down through every single apartment, you broadcast it to everyone who needs to hear it.

    Context is perfect for global settings like user themes, language preferences, or authentication tokens that many distant components need access to.

    • Avoid deep prop drilling with context
    • Create providers to wrap component trees
    • Consume context using custom hooks
    • Use for global app state like themes
    Managing state (react.dev)
    Reusing stateful logic across components.
    Read more

    Custom hooks let you extract component logic into reusable JavaScript functions, helping you keep your component code clean and DRY.

    Think of a custom hook like a kitchen appliance. Instead of writing out the mechanical steps to blend ingredients every time you cook, you just use a blender.

    Building custom hooks helps you share complex behaviours, like window resizing or local storage syncing, across multiple different components effortlessly.

    • Extract reusable logic into functions
    • Must start with the word use
    • Can call other standard hooks inside
    • Keep component files short and readable

    Step 4: Building real apps

    Pages and URLs with React Router.
    Read more

    Routing allows users to navigate between different pages in a single-page React application without causing full browser page reloads.

    Think of routing like tabs in a filing cabinet. Clicking a different tab brings a new set of papers into view instantly without you needing to walk to a different room.

    Proper routing gives your app a native mobile feel with clean URLs, back button support, and distinct views for different features.

    • Enable multi-page navigation in React
    • Define URL paths and matching components
    • Use links instead of standard anchor tags
    • Handle dynamic parameters in URLs
    React Router docs
    Tailwind, CSS modules or a component library.
    Read more

    Styling in React ranges from traditional CSS stylesheets and modules to utility-first frameworks like Tailwind CSS that let you style elements directly in your markup.

    Think of styling choices like choosing an outfit. You can sew your own clothes from scratch, buy ready-made suits, or mix and match versatile wardrobe staples.

    Choosing the right styling approach helps you build consistent, beautiful user interfaces quickly while keeping your CSS maintainable as your project grows.

    • Explore Tailwind CSS for rapid styling
    • Use CSS modules to avoid class clashes
    • Keep design tokens consistent
    • Ensure responsive design across screens
    Tailwind CSS docs
    Typing props and state for safer components.
    Read more

    TypeScript adds static typing to JavaScript, catching bugs in your editor before you even run your code in the browser.

    Think of TypeScript like spellcheck in a word processor. It highlights spelling mistakes and grammatical errors instantly as you type.

    Using TypeScript with React gives you brilliant code completion and ensures you never accidentally pass the wrong props into your components.

    • Add static types to props and state
    • Catch bugs before running the app
    • Enjoy better editor autocomplete support
    • Define interfaces for data objects
    TypeScript Handbook
    Testing what users see with Testing Library.
    Read more

    Testing libraries let you simulate user interactions and verify that your components display the correct information and behave as expected.

    Think of testing like a quality control check on an assembly line, ensuring every product works correctly before it ships to customers.

    Writing tests gives you the confidence to refactor your code and add new features without accidentally breaking existing functionality.

    • Test what users see and do
    • Use Testing Library for robust checks
    • Simulate clicks and typing in tests
    • Ensure components handle errors gracefully
    React Testing Library
    (optional)
    Server rendering, routing and deployment in one framework.
    Read more

    Next.js is a popular React framework that provides server-side rendering, file-based routing, and built-in performance optimisations out of the box.

    Think of Next.js like buying a fully furnished house rather than building one from bare timber and pipes. Everything is already set up and ready to move in.

    Using Next.js makes your web apps load faster for search engines and users, while simplifying deployment and project structure.

    • Build full-stack React applications
    • Use file-based routing automatically
    • Improve performance with server rendering
    • Deploy easily to modern cloud platforms
    Next.js docs

    Related roadmaps