: 리액트 내부적으로는 render라는 함수를 실행시켜 주는데,
매개변수로 인자를 하나씩만 넣어줄 수 있기 때문에 하나의 인자를 만들어주려면 하나의 부모로 감싸줘야 한다.
setState(상태변경함수)로 상태를 업데이트하면, 리액트는 즉시 상태를 변경하지 않는다
setState는 일반업데이트 / 함수형업데이트 두가지 방법으로 사용하는데,
일반업데이트는 내부적으로 여러 가지 일을 처리하기 때문에 단번에 변경되는 것이 아니다! 일괄처리하는 배치업데이트를 한다.
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
setCount(count + 1);
setCount(count + 1);
};
return (
<button onClick={handleClick}>Count: {count}</button>
);
count가 3씩 증가할 것이라고 예상하지만, 실제로는 count가 1씩 증가한다.setCount 함수가 호출될 때마다 상태 업데이트가 큐(queue)에 등록되지만, 같은 렌더링 사이클 내에서는 count 상태가 여전히 동일한 값(이 경우 0)을 참조하기 때문입니다.const [count, setCount] = useState(0);
const handleClick = () => {
setCount(prevCount => prevCount + 1);
setCount(prevCount => prevCount + 1);
setCount(prevCount => prevCount + 1);
};
return (
<button onClick={handleClick}>Count: {count}</button>
);
setCount에 콜백 함수를 전달하고 있다.prevCount)을 인자로 받아, 그 값을 기반으로 새로운 상태를 만든다.prevCount는 항상 최신 상태 값을 참조하기 때문에 중요하다.결과:
count가 3씩 증가한다.setCount 호출이 이전 상태 값을 정확히 참조하기 때문이다.콜백 함수의 필요성:

리액트로 투두리스트 만들기를 하면서,
input창에 입력한 값을 추가버튼을 클릭하면서 'handleSubmit'의 추가함수에서 e.preventDefault();를 해야한다.
preventDefault 함수는 기본 동작을 실행하지 않도록 한다.
onSubmit의 기본 동작은 새로고침이라 e.preventDefault()를 실행하면 새로고침 하는 것을 방지한다.