-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathselectAllCheckboxes.js
More file actions
52 lines (45 loc) · 1.11 KB
/
Copy pathselectAllCheckboxes.js
File metadata and controls
52 lines (45 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { useState } from "react";
const initialItems = [
{ id: 1, name: "React", checked: false },
{ id: 2, name: "Node", checked: false },
{ id: 3, name: "MongoDB", checked: false },
];
export default function SelectAllCheckboxes() {
const [items, setItems] = useState(initialItems);
const allSelected = items.every((item) => item.checked);
const toggleAll = () => {
setItems((prev) =>
prev.map((item) => ({
...item,
checked: !allSelected,
}))
);
};
const toggleItem = (id) => {
setItems((prev) =>
prev.map((item) =>
item.id === id ? { ...item, checked: !item.checked } : item
)
);
};
return (
<div>
<label>
<input type="checkbox" checked={allSelected} onChange={toggleAll} />
Select All
</label>
{items.map((item) => (
<div key={item.id}>
<label>
<input
type="checkbox"
checked={item.checked}
onChange={() => toggleItem(item.id)}
/>
{item.name}
</label>
</div>
))}
</div>
);
}