Login
Guides & Tutorials

How to Build a React Accordion Menu from Scratch

In this guide, we will explore how to build a React accordion menu from scratch. Accordion menus are a popular UI component used in web development to display collapsible content. With React, we can create a flexible and reusable accordion menu that can be easily integrated into any project. Throughout this guide, we will cover step by step how to build a React accordion menu, including setting up a React project, creating the necessary components, and implementing the accordion functionality. Let's dive in!

Last updated on October 5, 2023 at 5:47 PM

Author's avatar

Krste Rajchevski

Software Engineer @ Bugpilot

Annoyed by React errors?
Bugpilot is the error monitoring platform for React. Catch unexpected errors, troubleshoot, and fix with our AI assistant. Learn more and create an account to start your 14-day free trial.

##Setting Up the React Project
Before we can start building the accordion menu, let's set up a basic React project. If you already have a React project up and running, feel free to skip this part.
First, make sure you have Node.js and npm installed on your machine. Open your terminal and follow these steps:
###Step 1: Create a new React project
Run the following command to create a new React project using Create React App:

npx create-react-app accordion-menu

This will create a new folder named accordion-menu with the basic structure of a React project.
###Step 2: Navigate to the project folder
Navigate to the project folder using the following command:

cd accordion-menu

###Step 3: Start the development server
Start the development server to verify that your React project is set up correctly:

npm start

This will open the React app in your browser. If you see the React logo and a "Welcome to React" message, congratulations! You have successfully set up the React project.
##Creating the Accordion Component
Now that we have our React project set up, let's create the Accordion component. This component will serve as the container for our accordion menu.
###Step 1: Create a new file
Create a new file named Accordion.js inside the src folder.
###Step 2: Import React and the necessary components
Add the following code to import React and the necessary components:

1import React from "react";
2
3import AccordionItem from "./AccordionItem";
4

###Step 3: Create the Accordion component
Add the following code to create the Accordion component:

1const Accordion = () => {
2  return (
3    <div className="accordion">
4      <AccordionItem
5        title="Section 1"
6        content="Content for Section 1"
7      />
8      <AccordionItem
9        title="Section 2"
10        content="Content for Section 2"
11      />
12      <AccordionItem
13        title="Section 3"
14        content="Content for Section 3"
15      />
16    </div>
17  );
18};
19
20export default Accordion;
21

In this code, we have a div element with a class of "accordion". Inside the div, we have three instances of the AccordionItem component, each with a title and content.
##Implementing the Accordion Functionality
Now that we have the Accordion component set up, let's implement the accordion functionality. This will allow us to collapse and expand the accordion sections when clicked.
###Step 1: Create the AccordionItem component
Before we can implement the accordion functionality, we need to create the AccordionItem component. Create a new file named AccordionItem.js inside the src folder and add the following code:

1import React, { useState } from "react";
2const AccordionItem = ({ title, content }) => {
3  const [isOpen, setIsOpen] = useState(false);
4  const handleClick = () => {
5    setIsOpen(!isOpen);
6  };
7
8  return (
9    <div className="accordion-item">
10      <button
11        className="accordion-title"
12        onClick={handleClick}>
13        {title}
14      </button>
15      {isOpen && <div className="accordion-content">{content}</div>}
16    </div>
17  );
18};
19
20export default AccordionItem;
21

In this code, we have a div element with a class of "accordion-item". Inside the div, we have a button element with a class of "accordion-title". When the button is clicked, the isOpen state is toggled, and the content is displayed or hidden based on the isOpen value.
###Step 2: Styling the accordion
To complete the accordion menu, we need to add some basic styles. Create a new file named Accordion.css inside the src folder and add the following code:

1.accordion {
2  border: 1px solid #ddd;
3  border-radius: 4px;
4  margin-bottom: 20px;
5}
6
7.accordion-item {
8  border-bottom: 1px solid #ddd;
9  padding: 10px;
10}
11
12.accordion-title {
13  border: none;
14  background: none;
15  cursor: pointer;
16  font-weight: bold;
17}
18
19.accordion-content {
20  padding: 10px;
21}
22

In this code, we have some basic styles for the accordion menu, including borders, padding, and font weight.
##Conclusion
In this guide, we have learned how to build a React accordion menu from scratch. We started by setting up a basic React project and then created the Accordion and AccordionItem components. Lastly, we implemented the accordion functionality and added basic styles to complete the accordion menu. You can now take this code and integrate it into your own React projects to create collapsible and interactive UI components. Happy coding!

Annoyed by React errors?
Bugpilot is the error monitoring platform for React. Catch unexpected errors, troubleshoot, and fix with our AI assistant. Learn more and create an account to start your 14-day free trial.

Get Bugpilot