리액트에서 체크박스의 체크 여부에 따라 카운트 상태를 +1 Or -1 해줄 일이 있었다.
const handleCheck = () => {
setIsChecked(!isChecked);
}
return (
<input type="checkbox" onChange={handleCheck} />
)
useEffect(() => {
isChecked ?
setSelectedIssues(selectedIssues + 1) :
setSelectedIssues(selectedIssues - 1);
}, [isChecked]);
체크박스가 체크될 때마다 isChecked
(boolean) 의 상태를 바꾸고,
useEffect는 isChecked
를 지켜보다가 isChecked의 true/false에 따라
SelectedIssues
(number) 의 상태를 +1 / -1 해주었었다.
selectedIssues
를 사용하는 경우 A-0 컴포넌트 렌더링에 따라 A-1 컴포넌트가 리렌더링 되어 useEffect에서 isChecked
를 다시 읽는다는 점이다.selectedIssues
의 값이 0 으로 들어오더라도 A-1 컴포넌트의 useEffect 에 의해 selectedIssues
는 -1 로 세팅되어 버린다. const handleCheck = () => {
setIsChecked(!isChecked);
isChecked ?
setSelectedIssues(selectedIssues - 1) :
setSelectedIssues(selectedIssues + 1);
};
};
return (
<input type="checkbox" onChange={handleCheck} />
)
handleCheck
함수 안에서 isChecked
의 상태 뿐만 아니라, selectedIssues
의 상태도 함께 바꿔줬다.