My Personal React Roadmap in 10 Levels

created at 14/11/2025updated at 14/11/2025

6 min read
react
learn react

This is my personal roadmap, the one I wish I had when I wrote my first component. The goal is simple. Take you from zero to a real React developer through 10 clear levels using one concrete example. Let’s start at Level 1.

Level 1. Your first components

In React, everything starts with components. They let you split your UI into small building blocks that are easier to understand. Before adding anything fancy, you need to get familiar with the basics.

At this stage, you should learn:

  • How components work and how to write your own

  • JSX basics like conditional rendering and rendering lists

  • The difference between props and state

  • Composition patterns like children

Here is what your todolist might look like at Level 1. A simple, read-only interface that displays tasks.

// Read-only list of tasks
export default function TodoList({ tasks }) {
return (
<ul>
{tasks.map(task => (
<li key={task.id}>
{/* Display task only */}
{task.title}
</li>
))}
</ul>
);
}

✅ At this point, your interface works but does nothing else.
👉 Now it’s time to make it interactive.

Level 2. Add interactivity

Your todolist should start reacting to the user. Literally.

To do that, you need to understand a bit more about how React renders. You learn how to store data, listen to user events and handle forms.

  • Rendering lifecycle

  • useState

  • Events and how to handle them

  • Forms and input management

Let’s upgrade the todolist and allow users to toggle a task as completed.

// Basic interactive todolist
import { useState } from "react";
export default function TodoList() {
const [tasks, setTasks] = useState([
{ id: 1, title: "Learn React", done: false },
{ id: 2, title: "Build a todolist", done: false },
]);
const toggleTask = (id) => {
// Update state
setTasks(tasks.map(t =>
t.id === id ? { ...t, done: !t.done } : t
));
};
return (
<ul>
{tasks.map(task => (
<li key={task.id}>
<input
type="checkbox"
checked={task.done}
onChange={() => toggleTask(task.id)}
/>
{task.title}
</li>
))}
</ul>
);
}

✅ You can now build a real interactive app.
👉 Next step. Fetch your data from an API.

Level 3. useEffect

Welcome to the level where every beginner struggles a bit. And it’s normal.
useEffect controls everything that happens outside the rendering flow: fetching data, subscriptions, timers and so on.

At this level, you learn:

Let’s fetch tasks from an API.

import { useEffect, useState } from "react";
export default function TodoList() {
const [tasks, setTasks] = useState([]);
useEffect(() => {
// Fetch tasks from an API
async function loadTasks() {
const res = await fetch("/api/tasks");
const data = await res.json();
setTasks(data);
}
loadTasks();
}, []); // Run only once at mount
return (
<ul>
{tasks.map(task => (
<li key={task.id}>{task.title}</li>
))}
</ul>
);
}

✅ You can now connect your React app to the outside world.
👉 Let’s move to navigation.

Level 4. Routing

When your app grows, you need pages. Detail pages, create pages, edit pages.

You learn:

  • Routing with React Router

  • Modern alternatives like TanStack Router

Once routing is set up, you can navigate in your todolist app. But now you face a new problem. You start passing props everywhere.

👉 Let’s learn how to avoid this

Level 5. Avoid props drilling

This is the moment to introduce global state without going too far.

  • useContext

  • Basic state management patterns

You can now share data across your entire app without sending props through five levels of components.

Level 6. Mastering hooks

React has more powerful hooks that help with specific patterns.

  • useRef for referencing elements

  • useReducer for complex state logic

  • Creating your own custom hooks

✅ At this point, your todolist can grow with reusable logic.
👉 Time to optimize.

Level 7. Optimize your app

You want your todolist to stay smooth even when you have a lot of tasks.

  • useMemo

  • useCallback

  • Once again avois unnecessar useEffect !

✅ These tools help you avoid unnecessary rendering. Your app feels faster.
👉 The next natural step is testing.

Level 8. Testing

A professional app needs tests.

  • Vitest or Jest

  • A quick look at TDD (Write a test first, then the code that makes it pass.)

✅ Now your app is reliable and production ready. But let’s make it beautiful too.

Level 9. Add design and animation

Time to polish everything.

  • Tailwind and Shadcn

  • MagicUI

  • Motion for animation

✅ Your app now feels clean, modern and satisfying to use.
👉 You could deploy it right now. But you might want something more powerful in the long run.

Level 10. Frameworks with react

React by itself is great, but frameworks make your life easier.

  • Next.js

  • Astro

  • TanStack Start

Or React with Vite plus a backend framework like Hono. This is what I did on my latest side project.
At this stage, you have everything you need to build real apps !


Conclusion

React is not something you master in one week. It grows with you. This ten level roadmap is my own way of approaching it and it reflects what helped me become comfortable with React in real projects.
Take your time, understand each level before moving on, and use your todolist as a playground.
Once you reach the end, you will not only know React. You will know how to build things.

written by

@valentinafso@valentinafso

From the same author

See all

You’ll love these too