Creating a simple to-do list application with React

Creating a Simple To-Do List Application with React

In the world of web development, building a simple to-do list application is often one of the first projects that developers undertake when learning a new framework. React, with its component-based architecture and state management capabilities, is an excellent choice for creating a user-friendly and efficient to-do list app. In this article, we will walk through the process of developing a basic to-do list application using React, complete with clear code examples and actionable insights.

What is React?

React is a JavaScript library developed by Facebook for building user interfaces, especially single-page applications where you need a fast and interactive experience. It allows developers to create reusable UI components, manage state efficiently, and handle dynamic data changes without reloading the entire page.

Why Build a To-Do List Application?

A to-do list application is a practical example for several reasons:

  • Simplicity: It helps you grasp basic concepts of React, such as components, props, and state management.
  • Functionality: You can implement CRUD (Create, Read, Update, Delete) operations, which are fundamental in many applications.
  • Customization: Once you have the basic structure, you can easily extend its functionality with your unique features.

Setting Up Your React Environment

Before diving into the code, ensure your development environment is set up properly. You’ll need Node.js and npm (Node Package Manager) installed on your machine. If you haven't installed them yet, download them from Node.js official website.

Creating a New React App

To create a new React application, use the Create React App CLI. Open your terminal and run:

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

This command sets up a new React project in a directory called todo-list-app and starts a local development server.

Building the To-Do List Application

Step 1: Structuring Your Application

In the src folder, you’ll find a default App.js file. We’ll modify this file to create our to-do list. Here’s a simple structure we’ll implement:

  1. Input Field: To add new tasks.
  2. Task List: To display the current tasks.
  3. Buttons: To manage tasks (add, delete, and toggle completion).

Step 2: Code Implementation

Let’s start coding our application. Open App.js and replace its content with the following:

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

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

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

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

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

  const toggleTaskCompletion = (index) => {
    const newTasks = tasks.map((task, i) => {
      if (i === index) {
        return { ...task, completed: !task.completed };
      }
      return task;
    });
    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} style={{ textDecoration: task.completed ? 'line-through' : 'none' }}>
            {task.text}
            <button onClick={() => toggleTaskCompletion(index)}>Toggle</button>
            <button onClick={() => handleDeleteTask(index)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default App;

Code Breakdown

  • State Management: We use the useState hook to manage the task input and the list of tasks.
  • Adding Tasks: The handleAddTask function updates the tasks array when a new task is added.
  • Deleting Tasks: The handleDeleteTask function removes a task based on its index.
  • Toggling Completion: The toggleTaskCompletion function marks tasks as completed or not.

Step 3: Styling Your Application

To make your application visually appealing, you can add some CSS. Create a file called App.css in the src folder and add the following styles:

.App {
  text-align: center;
  margin: 20px;
}

input {
  padding: 10px;
  width: 200px;
  margin-right: 10px;
}

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

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

Testing Your Application

Once you have implemented the code, go back to your browser where the local server is running. You should see your to-do list application. Try adding tasks, toggling their completion state, and deleting them to see how the app behaves.

Troubleshooting Common Issues

  • Component Not Updating: Ensure that you are correctly setting state using the setState functions and not mutating the state directly.
  • Input Field Not Working: Check if the onChange handler is properly set up to update the state.

Conclusion

Congratulations! You have successfully created a simple to-do list application using React. This project not only reinforces your understanding of React’s core concepts but also provides a solid foundation for building more complex applications in the future.

Next Steps

Now that you have a functional to-do list, consider adding features like:

  • Task due dates
  • Filtering tasks by completion status
  • Saving tasks to local storage

With these enhancements, your to-do list app can evolve into a more sophisticated project that leverages the full potential of React! 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.