๐ ํฌ๋ฐ์ด ํซ๋ธ๋ ์ธ ์ฃผ์
H.wang(ํฉ์ ๋ฆผ)์ Reactย useState ์๋ฒฝ ํด๋ถํ
@์ํฐํด ์๊ฐ ์ป์ moment:
/๋ฆฌ์กํธ์ State๋ ๋๋์ง์๊ฒ ๋ถ์ด๋ฃ๋ โ์๋ช ๋ ฅโ๊ณผ ๊ฐ๋ค/
์ถ์ฒ: ํฉ์ ๋ฆผ [3์ฃผ์ฐจ React์ฐ์ต๊ณผ์ (๋๋์ง๊ฒ์)]
//[ํต์ฌ์ฝ๋1]: ์ค์
const [timeLeft, setTimeLeft] = useState(15.0); //๋จ์์๊ฐ(์ซ์)
const [score, setScore] = useState(0); //์ ์(์ซ์)
const [moles, setMoles] = useState(Array(4).fill('empty')); //๊ตฌ๋ฉ์ํ(๋ฐฐ์ด)
const [isActive, setIsActive] = useState(false); //๊ฒ์์งํ์ฌ๋ถ(๋ถ๋ฆฌ์ธ)
//[ํต์ฌ์ฝ๋2]: ์ด์ ์ํ ์ฐธ์กฐํ๋ฉฐ ์
๋ฐ์ดํธ
setMoles((currentMoles) => {
let updatedMoles = [...currentMoles]; //๊ธฐ์กด๋ฐฐ์ด๋ณต์ฌ(๋ถ๋ณ์ฑ์ ์ง)
if (updatedMoles[randomIndex] !== 'hit') {
updatedMoles[randomIndex] = 'empty';
}
return updatedMoles; //์๋ก์ด์ํ๋ฅผ ๋ฐํํ๋ฉฐ ํ๋ฉด ์
๋ฐ์ดํธ
});
//[ํต์ฌ์ฝ๋3]: ๋ถ๋ชจ์ ์ํ๋ฅผ ์์์๊ฒ ์ ๋ฌ
<StatusBoard
timeLeft={timeLeft.toFixed(1)}
score={score}
successCount={successCount}
failCount={failCount}
/>
<MoleGrid moles={moles} onMoleClick={targetClick} />
์ด๋ฒ ๊ณผ์ ๋ฅผ ์งํํ๋ค๋ณด๋.. ์ ๋ ๋ฆฌ์กํธ ์ํ(State)์ ์๋ฆฌ๋ฅผ ์ดํดํ๋๋ผ ๋์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐ๋ย let a = 10;ย ๊ฐ์ ์ผ๋ฐ ๋ณ์๋ ๊ฐ์ด ๋ฐ๋์ด๋ ํ๋ฉด์ด ๊ฟ์ฉ๋ ํ์ง ์์ต๋๋ค.
๋ฆฌ์กํธ๋ผ๋ ๊น๋ค๋ก์ด ์์ด๋ โ๋ด๊ฐ ๊ฐ์ํ๊ณ ์๋ ์ ์ฉ ๋ณ์(State)๊ฐ ๋ฐ๋ ๋๋ง, ํ๋ฉด์ ์๋ก ๊ทธ๋ ค์ค ๊ฑฐ์ผ!"
๋ผ๊ณ ์ ์ธํ๊ธฐ ๋๋ฌธ์ด์ฃ .
๋๋์ฒดย useState๊ฐ ๋ญ๊ธธ๋ ์ฐ๋ฆฌ๋ฅผ ์ดํ ๋ก ํ๋ค๊ฒ ํ ๊น์?
๋ฆฌ์กํธ์ ์ฌ์ฅ, ์ํ ๊ด๋ฆฌ์ ํต์ฌ์ ์ง๊ธ๋ถํฐ ๋ฑ๋ฑ์ด ํด๋ถํด ๋๋ฆฝ๋๋ค.
useState๋ ์ง์์ '์ค๋งํธ ์ปจํธ๋กค๋ฌ'๋ค!์ง ๊ตฌ์กฐ(HTML/์ปดํฌ๋ํธ)๋ ๋ฐ๋์ง ์์ง๋ง, ์ปจํธ๋กค๋ฌ์ ์ค์ ๊ฐ(State)์ ๋ฐ๋ผ ์กฐ๋ช ์ด ์ผ์ง๊ฑฐ๋ ์์ด์ปจ์ด ์๋ํ๋ฏ, ๋ฆฌ์กํธ ๋ํ, ์ํ์ ๋ฐ๋ผ UI๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.