How to Structure Your React Projects: A Guide for Beginners

Rafin RahmanRafin Rahman
4 min read

Creating a well-structured React project can be challenging, especially when you're just starting out. In this guide, we'll walk you through three different ways to organize your React project files and folders, suitable for beginner, intermediate, and advanced users. Let's dive in!

Beginner Project Structure

For small projects, keeping things simple is key. Here's a basic structure to get you started:

my-beginner-app/
├── public/
├── src/
│   ├── components/
│   │   ├── Button.js
│   │   ├── FormInput.js
│   │   ├── HomePage.js
│   │   └── NavBar.js
│   ├── hooks/
│   │   └── useTodo.js
│   ├── App.js
│   ├── index.js
│   ├── formatDate.js
│   ├── formatCurrency.js
│   └── App.css
├── package.json
└── .eslintrc

Key Points:

  • components/: Store all your UI components here.

  • hooks/: Custom hooks go here.

  • App.js and index.js: The entry points of your app.

  • Utility functions: Place them directly in the src folder for easy access.

This structure works great for small applications where you don't have too many files to manage.

Intermediate Project Structure

As your project grows, you need a bit more organization. Here’s a structure for medium-sized projects:

my-intermediate-app/
├── public/
├── src/
│   ├── assets/
│   │   ├── images/
│   │   ├── svgs/
│   │   └── global.css
│   ├── components/
│   │   ├── form/
│   │   │   └── FormInput.js
│   │   ├── ui/
│   │   │   ├── Button.js
│   │   │   └── Modal.js
│   │   └── NavBar.js
│   ├── context/
│   │   └── AuthContext.js
│   ├── data/
│   │   └── constants.js
│   ├── hooks/
│   │   └── useTodo.js
│   ├── pages/
│   │   ├── HomePage/
│   │   │   ├── ToDoForm.js
│   │   │   ├── ToDoList.js
│   │   │   ├── ToDoItem.js
│   │   │   ├── NewTodoModal.js
│   │   │   └── index.js
│   │   ├── LoginPage/
│   │   │   └── LoginForm.js
│   │   └── SettingsPage/
│   │       └── SettingsForm.js
│   ├── utils/
│   │   ├── formatDate.js
│   │   └── formatCurrency.js
│   ├── App.js
│   └── index.js
├── package.json
└── .eslintrc

Key Points:

  • assets/: Store images, SVGs, and global CSS here.

  • components/: Further organise components into subfolders like form and ui.

  • context/: Manage React context files.

  • data/: Store constants or json data like "list of office locations", "list of courses" etc...

  • pages/: Each page has its own folder containing all related components.

  • utils/: For utility functions.

This structure helps keep your files organized as your application grows, making it easier to maintain and scale.

Advanced Project Structure

my-advanced-app/
├── public/
├── src/
│   ├── assets/
│   │   ├── images/
│   │   ├── svgs/
│   │   └── global.css
│   ├── components/
│   │   ├── form/
│   │   │   └── FormInput.js
│   │   ├── ui/
│   │   │   ├── Button.js
│   │   │   └── Modal.js
│   │   └── NavBar.js
│   ├── context/
│   │   └── AuthContext.js
│   ├── data/
│   │   └── constants.js
│   ├── hooks/
│   │   └── useTodo.js
│   ├── layouts/
│   │   ├── NavBarLayout.js
│   │   └── SideBarLayout.js
│   ├── lib/
│   │   └── axios.js
│   ├── services/
│   │   ├── apiService.js
│   │   └── authService.js
│   ├── utils/
│   │   ├── formatDate.js
│   │   └── formatCurrency.js
│   ├── features/
│   │   ├── authentication/
│   │   │   ├── components/
│   │   │   │   └── LoginForm.js
│   │   │   ├── hooks/
│   │   │   │   └── useAuth.js
│   │   │   ├── services/
│   │   │   │   └── authService.js
│   │   │   └── index.js
│   │   ├── todos/
│   │   │   ├── components/
│   │   │   │   ├── ToDoForm.js
│   │   │   │   ├── ToDoItem.js
│   │   │   │   ├── ToDoList.js
│   │   │   │   └── NewTodoModal.js
│   │   │   ├── context/
│   │   │   │   └── ToDoContext.js
│   │   │   ├── hooks/
│   │   │   │   └── useTodo.js
│   │   │   ├── services/
│   │   │   │   └── todoService.js
│   │   │   └── index.js
│   ├── pages/
│   │   ├── HomePage.js
│   │   ├── LoginPage.js
│   │   ├── ProjectsPage.js
│   │   ├── SettingsPage.js
│   │   └── SignUpPage.js
│   ├── App.js
│   └── index.js
├── package.json
└── .eslintrc

Key Points:

  • layouts/: For layout components like navbars and sidebars.

  • lib/: Wrap third-party libraries.

  • services/: API service calls.

  • features/: Encapsulate all code related to specific features in their own folders.

  • pages/: Only contain the main components for each page.

This advanced structure ensures your codebase remains maintainable and scalable as your application grows larger and more complex.

Conclusion

Choosing the right project structure depends on the size and complexity of your React application. Start simple, and as your project grows, gradually adopt more sophisticated structures. Happy coding!

😀
Follow me for more tips! LinkedIn
0
Subscribe to my newsletter

Read articles from Rafin Rahman directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Rafin Rahman
Rafin Rahman

I'm a London-based Software Engineer with over 7 years of experience in the EdTech industry. I love sharing valuable tips, insights, and providing mentorship to aspiring developers. Join me as I explore the world of software engineering, offer career advice, and help new minds thrive in the tech field.