ReactCHALLENGES
💻 Challenges🎁 Referral Program🐞 Report a Bug

© 2025 reactchallenges.com

Terms of ServicePrivacy PolicyContact

#24ToDo List with reducer
30min

Overview

Build a simple ToDo list using useReducer, based on Challenge 2, with add, delete, complete, and clear completed tasks.

Requirements

You need to implement a task list where the user can:

  • Add new tasks.
    • The task should be added when submitting the form (pressing Enter in the input or clicking the "Add" button).
    • Use onSubmit on the <form> to handle adding tasks.
  • Delete existing tasks.
  • Mark tasks as complete and toggle completion.
  • Clear all completed tasks.
  • Tasks should have a unique ID.
  • Use controlled inputs for the form.
  • Render the list dynamically using map.
  • Maintain immutability when updating the state.

Notes

By completing this challenge, you will practice:

  1. Adding an element to a list in React.
  2. Removing an element from a list using filter.
  3. Modifying an element of a list using map.
  4. Using useState to manage component state.
  5. Handling user input and form submission.
  6. Applying conditional rendering and dynamic classes (e.g., line-through for completed tasks).
  7. Rendering lists with map and using keys.

Tests

  1. adds a task when clicking Add button
  2. toggles task completion and apply line-through when checkbox is clicked
  3. deletes a task when delete button is clicked
  4. shows only 'Clear complete' button when there is at least one completed task
  5. clears completed tasks when 'Clear complete' is clicked
BackStart Challenge