React의 useState 훅을 사용할 때, 상태를 업데이트하는 방법은 크게 두 가지
const [test, setTest] = useState(0);
setTest(test + 1);
const [test, setTest] = useState(0);
setTest((prev) => prev + 1);
// 문제가 발생할 수 있는 코드
setTest(test + 1);
setTest(test + 1);
setTest(test + 1);
// 예상: 3 증가, 실제: 1 증가
// 안전한 코드
setTest((prev) => prev + 1);
setTest((prev) => prev + 1);
setTest((prev) => prev + 1);
// 예상 및 실제: 3 증가
function PrevState() {
const { cardState, setCardState } = useCard({
cardCompany: "",
cardNumber: "",
cardHolder: "",
expiredDate: "",
});
const handleCardNumber = (cardNumber) => {
setCardState((prevState) => ({
...prevState,
cardNumber,
}));
if (cardNumber.length === 8) {
setOpenCardPopup(true);
}
};
const handleCardCompany = (cardCompany) => {
setCardState((prevState) => ({
...prevState,
...cardCompany,
}));
setOpenCardPopup(false);
};
return (
<div>
<input
type="number"
value={cardState.cardNumber}
onChange={(e) => handleCardNumber(e.target.value)}
/>
<input
type="text"
value={cardState.cardCompany}
onChange={(e) => handleCardCompany(e.target.value)}
/>
</div>
);
}