ํฐ์คํ ๋ฆฌ ๋ทฐ
[React] CheckBox ํด๋ฆญ ์ ํ ์ด๋ธ ํ์ ์ ํํจ๊ณผ๋ฅผ ์ฃผ์!
stable_sound 2023. 4. 28. 16:30๊ธฐ์
๊ณผ์ ๋ฅผ ํ๋ฉด์ ์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ํด๋น li์ ๋ฐฐ๊ฒฝ์์ด ๋ฐ๋๋ ๊ธฐ๋ฅ ๊ตฌํ(์ ํ๋ ํจ๊ณผ)์ ์ฒ์ ํด๋ณด์๋ค.
์ด๋ป๊ฒ ํด์ผํ ์ง ๋จธ๋ฆฌ๋ก๋ ์กฐ๊ธ ์๊ฒ ๋๋ฐ ์ฝ๋ ์์ฑ์ด ์ฝ๊ฒ ๋์ง ์์์ ๊ฒ์์ํ๋ฉฐ ๊ฒจ์ฐ ๊ตฌํ์ ํ๋ค.
์์ด๋ฒ๋ฆฌ์ง ์๊ธฐ ์ํด ์ ๋ฆฌ๋ฅผ ํด๋ณธ๋ค!
โ๏ธ ๊ธฐ๋ฅ
App.js
import { Table } from "./components/Table/Table";
function App() {
const d = new Date();
const year = d.getFullYear();
let month = d.getMonth() + 1;
let day = d.getDate();
if (month <= 9) month = `0${month}`;
if (day <= 9) month = `0${day}`;
const date = `${year}-${month}-${day}`;
const data = [
{
no: 1,
title: "์๋
ํ์ธ์? ์ต๊ณ ๊ท์ฌ์ด ์ถ์์
๋๋ค.",
name: "์ถ์",
date: date,
},
{
no: 2,
title: "์ค๋์ ์ฒดํฌ๋ฐ์ค ์ฒดํฌ ์ li์ ๋ณํ๋ฅผ ์ค๋ณด์์ต๋๋ค.",
name: "์ ์",
date: date,
},
{
no: 3,
title: "๋ฆฌ์กํธ๋ ์ ๋ง ์ด๋ ค์ด ๊ฒ ๊ฐ์์.",
name: "๊ณ ์ฌ์ด",
date: date,
},
{
no: 4,
title: "๋ฒ์จ 4์๋ง์
๋๋ค. ์๊ฐ์ด ๋๋ฌด ๋น ๋ฅด๋ค์.",
name: "์ ์",
date: date,
},
{
no: 5,
title: "์์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ณด์์ต๋๋ค. ์ฐ์ต์ฉ์ด์์!",
name: "์ ์",
date: date,
},
];
return (
<div>
<h1>์ฒดํฌ๋ฐ์ค ์ฒดํฌ ์ li ๋ณํ์ํค๊ธฐ</h1>
<Table data={data} />
</div>
);
}
export default App;
๋จผ์ ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ํ
์ด๋ธ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ์๋ค.
ํ
์ด๋ธ ์ปดํฌ๋ํธ๋ div, ul, liํ๊ทธ๋ฅผ ์ด์ฉํด ๋ง๋ค์ด์ฃผ์๋ค.
1. ๊ฐ๋ณ ์ฒดํฌ/ํด์
// ๊ฐ๋ณ ์ฒดํฌ
// ์ฒดํฌ๋ ์์ดํ
์ ์์ด๋๋ฅผ ๋ฐฐ์ด ํํ๋ก ๊ด๋ฆฌ
// ์ฒดํฌ๊ฐ false์ด๋ฉด ํด๋น item์ id๊ฐ ์๋ ๊ฒ๋ค๋ง ๋ด์.
const [checkedItems, setCheckedItems] = useState([]);
const onChangeCheckBox = (e, item) => {
const isChecked = e.target.checked;
setCheckedItems((prevCheckedItems) => {
if (isChecked) {
return [...prevCheckedItems, item.no];
} else {
return prevCheckedItems.filter((no) => no !== item.no);
}
});
};
๊ฐ๋ณ ์ฒดํฌ์ ๊ฒฝ์ฐ, ๊ฐ li์ onChange
์ด๋ฒคํธ๊ฐ ๋ค์ด์์ ๋ ๋ฐฐ๊ฒฝ ์์์ด ๋ณํ๋๋ก ํด์ฃผ์๋ค.checkedItems
๋ฐฐ์ด์ ์ฒดํฌ๋ ์์ดํ
์ index ๋ฒํธ(no)๋ฅผ ๋ด๊ณ ์๋๋ฐ
checked๊ฐ true๋ผ๋ฉด ๊ธฐ์กด ๋ฐฐ์ด์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์ดํ
์ no๋ฅผ ์ถ๊ฐํ๋๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒดํฌ๊ฐ ํด์ ๋๋ฉด checked๊ฐ false์ด๋ฏ๋ก ์ด๋์๋ ์ฒดํฌ๋ ๊ฒ๋ง ํํฐ๋งํ์ฌ ๋ฆฌํดํ๋ค.
{data.map((item) => (
<li
key={item.no}
className={checkedItems.includes(item.no) ? "select" : ""}
>
{์ดํ ์ฝ๋๋ค...}
์ด๋ ๊ฒ ๋๋ฉด checkedItems ๋ฐฐ์ด์ ํด๋นํ๋ item.no
๊ฐ ์๋ค๋ฉด li์ select ํด๋์ค๋ฅผ ์ถ๊ฐํด ๋ฐฐ๊ฒฝ์์ ์ ์ฉํด์ค ์ ์๋ค.
2. ์ ์ฒด ์ฒดํฌ/ํด์
// ์ ์ฒด ์ฒดํฌ
const onCheckBoxAll = (e) => {
if (e.target.checked) {
const checkedListArr = [];
data.forEach((item) => checkedListArr.push(item.no));
setCheckedItems(checkedListArr);
} else {
setCheckedItems([]);
}
};
์ ์ฒด ์ฒดํฌ๋ ํ
์ด๋ธ์ header์ ์๋ checkBox์์ onChange ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
checked๊ฐ true๋ผ๋ฉด ์ฒดํฌ๋ฆฌ์คํธ ๋ฐฐ์ด์ ์์ฑํ๊ณ ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ forEach๋ก ์ํํ๋ฉด์ item.no
๋ค์ ๋ฐฐ์ด์ ๋ฃ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฐฐ์ด์ checkedItems
์ ๋ฃ์ด useState๋ก ๊ด๋ฆฌํ๋๋ก ํ๋ค.
๋ง์ฝ checked๊ฐ false๋ผ๋ฉด checkedItems
๊ฐ ๋น๋ฐฐ์ด์ด ๋์ด ์ ์ฒด ์ฒดํฌ ํด์ ๊ฐ ๋๋ค.
'Front-end ๐ฅ๐ค > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] onKeyDown ์ฌ์ฉ์ผ๋ก ์ธํ ์ค๋ฅ์ ๋ํด (3) | 2023.05.16 |
---|---|
[React] localStorage์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ useState ์ด๊น๊ฐ์ผ๋ก ๊ฐ์ ธ์๋ณด์! (0) | 2023.05.15 |
[React] ๊ฐ๋จํ TodoList ๋ง๋ค๊ธฐ ๐ (0) | 2023.04.28 |
[React] Router๋ฅผ ์ฌ์ฉํด ํ์ด์ง ์ด๋ํ๊ธฐ! (0) | 2023.04.27 |
[React] JavaScript๋ก ๋ง๋ ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง ํ๊ธฐ 1 (0) | 2023.03.13 |
- Total
- Today
- Yesterday
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ ์ ๋ฆฌ
- ์กธ์ ์ํ
- C์ธ์ด
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ
- css grid
- JavaScript
- php
- ์ ์ฒ๊ธฐ ์ค๊ธฐ ์ ๋ฆฌ
- php ๋ฌ๋ ฅ๋ง๋ค๊ธฐ ์์ฉ
- DAPP
- MySQL
- ์ ์ฒ๊ธฐ ์ค๊ธฐ
- ์ด๋๋ฆฌ์
- ์กธ์ ์ํ์ค๋น
- ํํ์ด์ง ๋ง๋ค๊ธฐ
- set ๊ฐ์ฒด
- ํ์ฅ์ค์ต ๊ธฐ๋ก
- ๊ฐค๋ฌ๋ฆฌ๋์ฐ๊ธฐ
- CSS
- ํ์ฅ์ค์ต
- ๋ธ๋ก์ฒด์ธ
- HTML
- ๋ ธ๋ง๋์ฝ๋
- ์ค๋งํธ์ปจํธ๋ํธ
- ๋ฐฑ์ค
- indexOf()
- ๋ฆฌ์กํธ
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- php๊ฒ์ํ๋ง๋ค๊ธฐ
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |