๐ข State.. useState!
Java๋ฅผ ๋ค๋ฃจ๋ค๊ฐ JavaScript์ ํจ์๋ค์ ์ ํ๋ฉด ๊ฐ๋์ฉ ๊น์ง ๋๋๋ค. ํนํ, React์ ๊ฐ์ ํ๋ก ํธ์๋์ชฝ์ ๋ํ ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ฉด ์ ๋ง ์๋ก์ด ์ธ์์ ์ ํ๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ ๋ค. ์ค๋ ๊ฐ๋จํ ํฌ์คํ ํ useState ํจ์๋ ๊ทธ ์ค ํ๋๋ค.
๋ State๋ ๋ณด๋ค ํธํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ํ React ๋ด ์ง์ ํจ์๋ผ๊ณ ์ ๋ฆฌํ๋ค. ์ธํฐ๋ท์ ๋ค์ ธ๋ณด๋ฉด ๋ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ํ ์ค๋ช
์ ์์ ๊ฒ์ด๋ค. ๋ค๋ง, ๋๋ ๋์ ์ธ์ด๋ก ๊ฐ๋
์ ์ ๋ฆฌํ ๋ฟ์ด๋ค. ๋ฌผ๋ก .. ์์ฃผ ๋ง์ด ์๋๊ฐ๋ค๋ฉด ๋๊ตฐ๊ฐ ์ง์ ํด์ฃผ์๊ธธ ๋ฐ๋ ๋ฟ์ด๋ค.
๋ง์ด ์ ๊น ๋ค๋ฅธ ๊ณณ์ผ๋ก ์๋ค. ๋ณด๋ค ํธํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ํ ํจ์๋ผ๋ ๊ฒ์ ์ด๋ค ๊ฐ์ ๋ํ ์ํ๋ฅผ ์ฃผ์ํ๋ค๊ฐ ํด๋น ๊ฐ์ ๋ํ ๋ณํ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ ํ ๋์์ ํด์ฃผ๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, PC์ ์๊ณ๋ฅผ ๋ณด๋ฉด ์, ๋ถ, ์ด๊ฐ ๋ณํํ ๋๋ง๋ค ๋ณํ๋๋ ์ซ์๋ฅผ ๊ฐ์งํด์ ํ๋ฉด์ ์๋ก ๊ทธ๋ ค์ฃผ๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ๋์์ ์ฝ๊ฒ ์ค์ ํ ์ ์๊ฒ ์ง์ํ๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์ดํดํ๋ฉด ํธํ ๊ฒ ๊ฐ๋ค.
โจ๏ธ ์์ ์ฝ๋
์๋ ์ฝ๋๋ React ๊ฐ์๋ฅผ ๋ฃ๊ณ ์๋ ๋ ธ๋ง๋์ฝ๋์ React ๊ณผ์ ํด๋ก ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์จ ๊ฒ์ด๋ค. (๊ฐ์ฌํฉ๋๋ค ๋๊ผฌ์ค~)
// UseState๋ฅผ ํตํด ์์ฑํ JavaScript ์ปดํฌ๋ํธ ์์
function MinutesToHours() {
const [amount, setAmount] = React.useState(0)
const [inverted, setInverted] = React.useState(false)
const onChange = (event) => {
setAmount(event.target.value)
}
const reset = () => setAmount(0)
const onInvert = () => {
reset()
setInverted((current) => !current)
}
return (
<div>
<div>
<label htmlFor="minutes">Minutes</label>
<input
value={inverted ? amount * 60 : amount}
id="minutes"
placeHolder="Minutes"
type="number"
onChange={onChange}
disabled={inverted}
/>
</div>
<div>
<label htmlFor="hours">Hours</label>
<input
value={inverted ? amount : Math.floor(amount / 60)}
id="hours"
placeHolder="Hours"
type="number"
onChange={onChange}
disabled={!inverted}
/>
</div>
<button onClick={reset}>Reset</button>
<button onClick={onInvert}>
{inverted ? "Turn back" : "Invert"}
</button>
</div>
)
}
return ๋ฌธ์ JSX๋ก ๋์ด ์๋ค. ์ค๊ฐ์ค๊ฐ ์ค๊ดํธ๋ก ์ ๋ ฅ๋์ด ์๋ ๋ถ๋ถ๋ค์ JavaScript๋ฅผ ํตํด ํด๋น ํจ์ ๋ด ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋, ๊ฐ๋จํ ๋ก์ง์ ๋ฃ์ด๋์ ์ฝ๋๋ผ๊ณ ์๊ฐํ๊ณ ๋๊ธฐ๋ฉด ๋๋ค. ํฌ๊ฒ ์ค์ํ์ง ์๋ค๋ ๋ง์ด๋ค.
์ค์ํ ๋ถ๋ถ์ ๊ฐ์ฅ ์๋จ์ const [] ๋ก ์ง์ ๋์ด ์๋ ๋ณ์์ด๋ค. const [x, y] = React.useState(0); ํํ๋ก ๋์ด ์๋ ๋ถ๋ถ์ด ๋ฐ๋ก ์ค๋์ ์ฃผ์ธ๊ณต์ด๋ค. x๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ํ ์ํ๊ฐ์ผ๋ก ์ดํดํ๋ฉด ๋๊ณ , y๋ x์ ๊ฐ์ ์๋ก ๋ณํ์ํค๋ setter๋ก ์ดํดํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋ก์ง์ ์ด์ฉํด์ onChange๋ onInvert๋ผ๋ ํจ์ ๋ด์ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ์ถ๊ฐ๋ก useState() ์์ ๋ค์ด๊ฐ ์๋ ํ๋ผ๋ฏธํฐ๋ x์ ๋ํ ์ด๊ธฐ๊ฐ์ด๋ค.
์ ๋ฆฌํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ event์ ๋ํ ๋ค์ํ ๊ฐ๋ค์ setter ํจ์์ ๋ฃ๊ณ , x๊ฐ์ event์ ๋ง์ถฐ์ ์ต์ ํํด์ฃผ๋ ํจ์๋ฅผ ํ๋ก๊ทธ๋๋ฐํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์์ฝํ ์ ์๊ฒ ๋ค.
'JavaScript > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Props (0) | 2024.08.01 |
---|---|
[React] JSX (0) | 2024.07.14 |