How to create a simple to-do list app in React

How to Create a Simple To-Do List App in React

Creating a to-do list app is one of the best ways to get started with React. It allows you to understand the core concepts of state management, event handling, and component lifecycle while building something practical. In this article, we’ll walk through the process of building a simple to-do list app using React, complete with actionable insights and code snippets to help you along the way.

What is a To-Do List App?

A to-do list app is a task management tool that allows users to create, manage, and track tasks. While the functionality can vary widely, the core features typically include adding new tasks, marking tasks as complete, and deleting tasks. Building such an app in React not only sharpens your coding skills but also provides real-world use cases, such as personal task management or integrating it into larger applications.

Why Use React for Your To-Do List App?

React is a popular JavaScript library for building user interfaces, especially for single-page applications. Its component-based architecture and efficient DOM manipulation make it perfect for building interactive applications like a to-do list. Here are some reasons to use React:

  • Component-Based Structure: Easily manage components and their states.
  • Virtual DOM: Efficient updates lead to improved performance.
  • Reusable Components: Write code once and reuse it across your app.

Getting Started: Setting Up Your React Environment

Before we dive into coding, ensure you have Node.js and npm (Node Package Manager) installed on your machine. You can create a new React app using Create React App with the following command:

npx create-react-app todo-list
cd todo-list
npm start

This command sets up a new React project in a folder named todo-list and starts the development server.

Step-by-Step Guide to Building the To-Do List App

Step 1: Create the Basic Structure

Open the src folder in your project and replace the content of App.js with the following code:

import React, { useState } from 'react';
import './App.css';

function App() {
  const [tasks, setTasks] = useState([]);
  const [task, setTask] = useState('');

  const handleInputChange = (e) => {
    setTask(e.target.value);
  };

  const handleAddTask = () => {
    if (task) {
      setTasks([...tasks, task]);
      setTask('');
    }
  };

  const handleDeleteTask = (index) => {
    const newTasks = tasks.filter((_, i) => i !== index);
    setTasks(newTasks);
  };

  return (
    <div className="App">
      <h1>To-Do List</h1>
      <input
        type="text"
        value={task}
        onChange={handleInputChange}
        placeholder="Add a new task"
      />
      <button onClick={handleAddTask}>Add Task</button>
      <ul>
        {tasks.map((task, index) => (
          <li key={index}>
            {task}
            <button onClick={() => handleDeleteTask(index)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default App;

Step 2: Understanding the Code

Let’s break down the code above:

  • State Management: We use the useState hook to manage the tasks and the input field.
  • Input Handling: The handleInputChange function updates the task state as the user types.
  • Adding Tasks: The handleAddTask function adds a task to the list when the button is clicked.
  • Deleting Tasks: The handleDeleteTask function removes a task based on its index.

Step 3: Styling Your App

To make your app visually appealing, add some styles. Open App.css and add the following CSS:

.App {
  text-align: center;
  max-width: 600px;
  margin: 0 auto;
}

input {
  padding: 10px;
  margin: 10px;
  width: 300px;
}

button {
  padding: 10px;
  margin-left: 5px;
}

ul {
  list-style-type: none;
  padding: 0;
}

li {
  display: flex;
  justify-content: space-between;
  padding: 10px;
  border: 1px solid #ccc;
  margin-top: 5px;
}

Step 4: Testing and Troubleshooting

After implementing the above code, run your app and check for functionality. Here are common issues you might encounter:

  • Empty Task Submission: Ensure that tasks are not added if the input is empty.
  • Task Deletion: Check that the correct task is deleted by ensuring the index is passed correctly.

Step 5: Enhancing Functionality (Optional)

Once you've got the basic app running, consider adding more features, such as:

  • Task Completion: Add a checkbox to mark tasks as complete.
  • Local Storage: Use the browser’s local storage to save tasks so they persist across page refreshes.
  • Editing Tasks: Allow users to edit existing tasks.

Conclusion

Building a simple to-do list app in React is a fantastic way to learn about components, state management, and event handling. Not only does it provide a practical application, but it also lays the groundwork for more complex projects. By following this guide, you have created a functional to-do list app and equipped yourself with foundational React skills.

Now that you've completed your app, you can continue to enhance it, integrate it with APIs, or even deploy it online. The possibilities are endless! Happy coding!

SR
Syed
Rizwan

About the Author

Syed Rizwan is a Machine Learning Engineer with 5 years of experience in AI, IoT, and Industrial Automation.