2 - Dynamic List of Items with Strikethrough
Description
Create a React application that displays a dynamic list of items. Each item in the list should have a checkbox that, when clicked, adds a strikethrough to the item's text, indicating it as completed.
Algorithm
Initialize a state variable to store the list of items, with each item having a
text
and acompleted
property.Render a list of items from the state variable.
Create a checkbox for each item that toggles the
completed
property when clicked.Use CSS to add a strikethrough to items with the
completed
property set totrue
.
Classes
TodoList
: A React component that manages the list of items and renders the list.
Code
import React, { useState } from 'react';
function TodoList() {
const [items, setItems] = useState([
{ text: 'Item 1', completed: false },
{ text: 'Item 2', completed: false },
{ text: 'Item 3', completed: false },
]);
const handleToggleCompleted = (index) => {
setItems(
items.map((item, i) =>
i === index ? { ...item, completed: !item.completed } : item
)
);
};
return (
<ul>
{items.map((item, index) => (
<li key={index}>
<input
type="checkbox"
checked={item.completed}
onChange={() => handleToggleCompleted(index)}
/>
<span style={{ textDecoration: item.completed ? 'line-through' : 'none' }}>
{item.text}
</span>
</li>
))}
</ul>
);
}
export default TodoList;
Explanation
The code defines a TodoList
component that utilizes the useState
hook to initialize a list of items. Each item has a text
and a completed
property. The component renders a list of items, with each item having a checkbox that toggles the completed
property when clicked. CSS is used to add a strikethrough to items with the completed
property set to true
.
Possible Future Enhancements
Add functionality to add and remove items from the list.
Implement a filter to show only completed or uncompleted items.
Use a more advanced CSS technique to animate the strikethrough effect.
Integrate with a backend service to persist the list of items.
Last updated