Skip to content

Commit d22e72c

Browse files
authored
Add checkbox
1 parent 8c78949 commit d22e72c

File tree

3 files changed

+78
-14
lines changed

3 files changed

+78
-14
lines changed

TodoItem.js

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
1-
import React from 'react'
1+
import React from "react";
2+
3+
function TodoItem({ task, deleteTask, toggleCompleted }) {
4+
function handleChange() {
5+
toggleCompleted(task.id);
6+
}
27

3-
function TodoItem(_todo) {
48
return (
5-
<div>TodoItem</div>
6-
)
9+
<div className="todo-item">
10+
<input type="checkbox" checked={task.completed} onChange={handleChange} />
11+
<p>{task.text}</p>
12+
<button onClick={() => deleteTask(task.id)}>X</button>
13+
</div>
14+
);
715
}
816

9-
export default TodoItem
17+
export default TodoItem;

TodoList.js

+53-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,58 @@
1-
import React from 'react'
1+
import React, {useState} from 'react'
22
import TodoItem from './TodoItem'
33

4-
function TodoList({todos}) {
5-
return (
6-
<div>
7-
{todos.map((todo, index) => (
8-
<TodoItem key={index} todo={todo} />
9-
))}
10-
</div>
11-
)
4+
function TodoList() {
5+
const [tasks, setTasks] = useState([
6+
{
7+
id: 1,
8+
text: 'Doctor Appointment',
9+
completed: true
10+
},
11+
{
12+
id: 2,
13+
text: 'Meeting at school',
14+
completed: false
15+
}
16+
])
17+
18+
const [text, setText] = useState('')
19+
function addTask(text) {
20+
const newTask = {
21+
id: Date.now(),
22+
text,
23+
completed: false
24+
}
25+
setTasks([...tasks, newTask])
26+
setText('')
27+
}
28+
29+
function deleteTask(id) {
30+
setTasks(tasks.filter(task => task.id !== id))
31+
}
32+
33+
function toggleCompleted (id) {
34+
setTasks(tasks.map(task => {
35+
if (task.id === id) {
36+
return {...task, completed: !task.completed}
37+
} else {
38+
return task
39+
}
40+
}))
41+
}
42+
43+
return (
44+
<div className='todo-list'>
45+
{tasks.map(task => (
46+
<TodoItem
47+
key={task.id} task={task} deleteTask={deleteTask} toggleCompleted={toggleCompleted}
48+
/>
49+
))}
50+
<input
51+
value={text} onChange={e => setText(e.target.value)}
52+
/>
53+
<button onClick={() => addTask(text)}>Add</button>
54+
</div>
55+
)
1256
}
1357

1458
export default TodoList

app.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import React from 'react'
2+
import TodoList from './TodoList'
3+
4+
function App() {
5+
return (
6+
<div className='App'>
7+
<TodoList/>
8+
</div>
9+
)
10+
}
11+
12+
export default App;

0 commit comments

Comments
 (0)