[강의 다시보기]
setState는 state 값을 변경시켜주는 함수:
const [state, setState] = useState(초기값)]state를 직접 변경하지 않고 setState를 사용하는 이유:
- state는 immutable(불변성)을 유지해야함
- state를 직접 수정하게 되면 리액트가 render 함수를 호출하지 않아 상태 변경이 일어나도 렌더링이 일어나지 않을 수 있음
첫번째 방법
두번째 방법
// 첫번째 방법
const Num1Button = ({ num, setNum }) => {
const onClick = () => {
setNum(num + 1);
setNum(num + 1);
};
return <button onClick={onClick}>증가</button>;
};
// 두번째 방법
const Num2Button = ({ setNum }) => {
const onClick = () => {
setNum((num) => num + 1);
setNum((num) => num + 1);
};
return <button onClick={onClick}>증가</button>;
};
// 두 방법을 실행해보자
const App = () => {
const [num1, setNum1] = useState(0);
const [num2, setNum2] = useState(0);
return (
<>
num1 : {num1} <Num1Button num={num1} setNum={setNum1} />
<hr />
num2 : {num2} <Num2Button setNum={setNum2} />
</>
);
};
'증가' 버튼을 각각 1번씩만 클릭했을때 화면에서 보여지는 결과:
분명히 두 클릭이벤트에서는 num + 1을 두번 실행한다. 그러면 결과적으로 +2가 된 값이 나와야하는데, 첫번째 방법에서는 제대로 반영이 안되는듯 하다.