부모 컴포넌트
자식 컴포넌트
- 헤더 컴포넌트 : 전체 선택 체크박스
- 내용 컴포넌트 : 개별 선택 체크박스
const parent = (props) => {
const [data, setData] = useState({
testInfo : {id : 1, data : "11"},
{id : 2, data : "22"},
{id : 3, data : "33"}
}
);
// 체크박스 선택 시 삭제할 리스트
const [delCheckedList, SetDelCheckedList] = useState([]);
// 전체 체크 클릭 시 발생하는 함수
const onCheckedAll = useCallback(
(checked) => {
if (checked) {
const checkedListArray = [];
data.testInfo.forEach((list) =>
checkedListArray.push(list.id));
SetDelCheckedList(checkedListArray);
} else {
SetDelCheckedList([]);
}
},
[data.testInfo]);
// 개별 체크 클릭 시 발생하는 함수
const onCheckedElement = useCallback(
(checked, intsId) => {
if (checked) {
SetDelCheckedList([...delCheckedList, intsId]);
} else {
SetDelCheckedList(delCheckedList.filter((el) => el !== id));
}
},[delCheckedList]);
}
const header = (props) => {
return (
<Fragment>
<table>
<thead>
<tr>
<th>
<Checkbox
checked={
props.delCheckedList.length === 0
? false
: props.delCheckedList.length === props.data.testInfo .length
? true
: false
}
onChange={(e) => props.onCheckedAll(e.target.value)}
/>
</th>
<th>test1</th>
<th>test2</th>
<th>test3</th>
</tr>
</thead>
</table>
</Fragment>
);
};
const content = (props) => {
return (
<Fragment>
<div>
<div>
<Checkbox
checked={
// data를 식별할 수 있는 컬럼에 key 값을 넣어줌
props.delCheckedList.includes(props.dataItem.id) ? true : false
}
onChange={(e) => props.onCheckedElement(e.target.value, props.dataItem.id)}
/>
</div>
<div>{props.dataItem.test1}</div>
<div>{props.dataItem.test2}</div>
<div>{props.dataItem.test3}</div>
</div>
</Fragment>
);
};