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
textand acompletedproperty.Render a list of items from the state variable.
Create a checkbox for each item that toggles the
completedproperty when clicked.Use CSS to add a strikethrough to items with the
completedproperty 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