Wednesday, October 22, 2025
HomeLanguagesHow to Create a Basic Notes App using ReactJS ?

How to Create a Basic Notes App using ReactJS ?

In this article, we are going to learn how to create a basic notes app using ReactJS. A notes app is a digital application that allows users to create, manage, and store textual notes for personal organization and reference.

Here is a demonstration of the making of a basic notes app using ReactJs. It will look like this:

Screenshot-from-2023-07-26-15-58-45

Prerequisites:

Project Setup:

Step 1: Create a new React app

npx create-react-app notes-app

Step 2: Change your directory and enter your main folder notes-app as :

cd notes-app

Step 3: Start editting app.js file

Step 4: Check Dependenncies/ package.json:

"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
}

Project structure:

Screenshot-from-2023-07-26-15-53-05

Approach:

  • First start creating a basic notes app layout with dummy text, divs, buttons, input, and heading tags along with well-defined classes and id.
  • Use classes and id to style the components using CSS and create a dummy notes app structure as shown in the introduction.
  • In react, we use hooks like useState to store the data items and also handle the inputs.
  • Create a dummy data array of objects having key, title, and description fields.
  • Define a handle function to get the input data and store it using useState hook. Also, define a remove function that accepts the key of the item which is to be removed.
  • Use the onClick event listener to call the adding or removing functions and update the notes array.

Example: In this example, we are using the above-explained approach.

Javascript




// App.js
  
import "./App.css";
import { useState } from "react";
  
function App() {
    const [title, setTitle] = useState("");
    const [des, setDes] = useState("");
    const [notes, setNotes] = useState(data);
    const [count, setCount] = useState(4);
  
    function remove(id) {
        setNotes(notes.filter((e) => e.key !== id));
    }
  
    function handle() {
        if (!title || !des) {
            window.alert("Incomplete input");
            return;
        }
        setNotes([
            ...notes,
            { key: count, title: title, des: des },
        ]);
        setCount(count + 1);
        setTitle("");
        setDes("");
        console.log(notes);
    }
  
    return (
        <div className="App">
            <div className="card">
                <div className="head">
                    <h1>React notes</h1>
                </div>
                <div className="notes">
                    {notes.map((e) => (
                        <div className="notes-item">
                            <div style={{ width: "90%" }}>
                                <h4>Title: {e.title}</h4>
                                <p>Note: {e.des}</p>
                            </div>
                            <button
                                type="input"
                                style={{
                                    fontSize: "20px",
                                    width: "8%",
                                    height: "35px",
                                    padding: "0 2% 0 2%",
                                    color: "black",
                                }}
                                onClick={() =>
                                    remove(e.key)
                                }>
                                X
                            </button>
                        </div>
                    ))}
                    <div className="add">
                        <h3>Add Notes</h3>
                        <input
                            type="text"
                            id="title"
                            placeHolder="Add title"
                            value={title}
                            onChange={(e) =>
                                setTitle(e.target.value)
                            }>
  
                        </input>
                        <input
                            type="text"
                            id="description"
                            placeholder="Notes"
                            value={des}
                            onChange={(e) => {
                                setDes(e.target.value);
                            }}>
  
                        </input>
                        <button
                            type="submit"
                            onClick={handle}>
                            Submit
                        </button>
                    </div>
                </div>
            </div>
        </div>
    );
}
  
// Dummy data
const data = [
    {
        key: 0,
        title: "Html",
        des: "HyperText MarkUp Language",
    },
    { key: 1, title: "CSS", des: "StyleSheet" },
    {
        key: 2,
        title: "JavaScript",
        des: "Scripting language for web",
    },
    {
        key: 3,
        title: "React",
        des: "JavaScript framework",
    },
];
  
export default App;


CSS




/* App.css*/
  
.App {
    text-align: center;
}
  
/* Styling universal selector */
* {
    /* margin-top: 50px; */
    margin: 0;
    margin-top: 10px;
  
    padding: 0;
    box-sizing: border-box;
}
  
/* Style body element */
body {
    min-height: 50vh;
    display: flex;
    align-items: center;
    text-align: center;
    justify-content: center;
    background: hsl(0, 0%, 100%);
    font-family: "Poppins", sans-serif;
}
  
/* Styling card container */
.card {
    /* min-height: 50vh; */
    height: fit-content;
    min-width: 33rem;
    max-width: 40rem;
    background: rgba(147, 208, 119, 1);
    margin: 0 1rem;
    box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
    width: 100%;
}
  
.head {
    position: relative;
    max-height: fit-content;
    min-width: 33rem;
    width: 100%;
    background: rgb(109, 157, 87);
  
    padding: 1rem;
}
  
  
/* Input box and button */
.add {
    padding: 5%;
    text-align: left;
    padding-left: 6%;
    /* margin: 10%; */
}
  
input {
    margin-right: 1%;
}
  
#title {
    width: 20%;
    font-size: larger;
}
  
#description {
    font-size: large;
    width: 60%;
}
  
button {
    border-radius: 5px;
    padding: 5px;
    font-size: large;
    color: #dbeefa;
    background-color: rgb(109, 157, 87);
}
  
/* style accordion */
.notes {
    margin: 5%;
    text-align: left;
}
  
/* style for accordion items */
.notes-item {
    display: flex;
    z-index: 100;
    padding: 2%;
    /* border-bottom: 1px solid #4e7b48; */
    font-size: larger;
    margin: 2%;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
  
/* style for accordion items */
.accordion-item {
    border-bottom: 1px solid #ddd;
    font-size: larger;
}


Step 5: Run the following command and the output will be visible at http://localhost:3000/

npm start

Output:

Peek-2023-07-26-15-58

Whether you’re preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, neveropen Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we’ve already empowered, and we’re here to do the same for you. Don’t miss out – check it out now!
RELATED ARTICLES

Most Popular

Dominic
32361 POSTS0 COMMENTS
Milvus
88 POSTS0 COMMENTS
Nango Kala
6728 POSTS0 COMMENTS
Nicole Veronica
11892 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11954 POSTS0 COMMENTS
Shaida Kate Naidoo
6852 POSTS0 COMMENTS
Ted Musemwa
7113 POSTS0 COMMENTS
Thapelo Manthata
6805 POSTS0 COMMENTS
Umr Jansen
6801 POSTS0 COMMENTS