๐ Nomad Coder ReactJS๋ก ์ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ
๊ฐ์๋ ธํธ (2021 Updated ver.)
React.js ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ฉฐ, render()
์ ๋งค๋ฒ ํธ์ถํ์ง ์๊ณ ์๋์ผ๋ก ๋ฆฌ๋ ๋๋ง์ ์ผ์ผํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
<script type="text/babel">
const root = document.getElementById("root")
function App() {
return (
(
<div>
<h3>Tocal Click : 0</h3>
<button>Click me!</button>
</div>
)
)
}
ReactDOM.render(<App />, root);
</script>
React.useState()
๋ data์ function์ ํฌํจํ ๋ฐฐ์ด์ ๋ฐํํ๋ค => State์ ์์ฑ
State : ๋ฐ์ดํฐ ์ ์ฅ์
์ด ํ ์ค๋ก ๊ธฐ์กด์ Bad Way์์ ์ผ๋ ์ ๋ง์ ์ฝ๋๋ฅผ ๋์ฒดํ ์ ์๊ฒ ๋์๋ค.
let count = 0;
function counterUp() {
count += 1
}
React.js๊ฐ ์ ๊ณตํ๋
useState()
๊ฐ ๋ฐํํ๋
'์ธ๋ฑ์ค์ ๋๋ฒ์งธ ๊ฐ [1]'
=== 'setCounter'
=== 'function'์ผ๋ก ์ด๋ฒคํธ ์์ฑ๊ณผ ํจ๊ป ์๋ ๋ฆฌ๋ ๋๋ง(UI update)๊น์ง ๊ตฌํํ ์ ์๋ค.
๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋๋ง๋ค ์ปดํฌ๋ํธ(App()
)์ ๋ฆฌ๋ ๋๋งํ๊ณ UI ์์์์ ๋ฐ๋ ๋ถ๋ถ์ refreshํ๋ค.
state๊ฐ ๋ฐ๋๋ฉด -> new value๋ฅผ ๊ฐ์ง๊ณ - > rendering application
state์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๋ก ๋๋๋ค.
setCounter(123)
setCounter('abc')
์์ ์ ํด์ง ๊ฐ์ modifier์ ์ ์ฉํด๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ์ฅ ๊ฐ๋จํ์ง๋ง ํ ๋ฒ ์
๋ ฅํ ๊ฐ์ ๋์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
์์์ ๊ตฌํํ๋ ์ฝ๋์์ ๋ฐ๋ก ์ด ๋ฐฉ๋ฒ์ ์ผ๋ค.
function App() {
const [counter, setCounter] = React.useState(0);
const onClick = () => {
setCounter(counter + 1)
};
์๋ ํ์ฌ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ผ๊ณ 1์ฉ ์ฆ๊ฐํ๋ ๊ตฌ์กฐ์ด๋ค. ํ์ง๋ง ํ์ฌ ๊ฐ์ ์์์น ๋ชปํ๊ฒ ๋ค๋ฅธ ๊ณณ์์ ๋ณํ ์ ์๋ค ( -> ์ง๊ธ์ ์ ์ดํด๊ฐ ์๋จ).
์ฐ๋ฆฌ๋ 1์ฉ ์ฆ๊ฐ์ํค๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์์ง๋ง,
counter๊ฐ ๋ค๋ฅธ ๊ณณ์์ update๋์ด ์ด๋ฏธ ๋ค๋ฅธ ๊ฐ์ด ๋๋ฉด
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฐ์ด ๊ณ์ฐ๋์ง ์๊ณ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
=> ๊ทธ๋์ ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ค.
๊ฐ์ฅ ํ์คํ๊ณ ์์ ํ๊ฒ 'ํ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๋ ๋ฐฉ๋ฒ'์ counter value์ ๊ธฐ์ค์ผ๋ก ๋์ง ์๊ณ , ํ์ฌ ๊ฐ์ ํํํ๋ ํจ์๋ก ์ ์ฉํ๋ ๊ฒ์ด๋ค.
setCounter(current => current + 1)
modifier์ ๋ก์ง์ ํจ์๋ก๋ ํํ์ด ๊ฐ๋ฅํ๋ค. ์ฒซ๋ฒ์งธ ์ธ์๋ก state์ ํ์ฌ ๊ฐ์ ๋๊ฒจ์ฃผ๊ณ (counter์ 0์ ๋ฃ์ ๊ฒ์ฒ๋ผ ๋ด๊ฐ ์ง์ ํ์ง ์์), current๊ฐ์ 1์ ๋ํด์ฃผ๋ ๋ก์ง์ ๋ง๋ค๋ฉด ๊ธฐ์กด์ ์ผ๋ ๋ฐฉ์๊ณผ ๊ฐ์ ์ญํ ์ ํ์ง๋ง ๋ ์์ ํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ก์ด state๊ฐ์ updateํ ์ ์๋ค.
function App() {
const [counter, setCounter] = React.useState(0);
const onClick = () => {
setCounter(current => current + 1)
};
Summary
State๋ React์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค. State๋ value(๊ฐ), modifier(๋ณํ ํจ์) ๋ ๊ฐ์ ๊ฐ์ ๋ฐฐ์ด๋ก ๊ฐ์ง๋ฉฐ, modifier์ ๋ก์ง์ ๋ฐ๋ผ value๊ฐ ์ค์ ๋๋ค.
์ด ๋, State์ ๊ฐ์ด ๋ฐ๋๋ฉด ์๋ก์ด ๊ฐ์ ๊ฐ์ง๊ณ ๋ ๋๋ง์ด ์๋์ ์ผ๋ก ์ผ์ด๋๊ณ ๊ทธ ๊ฐ์ด UI์ ํ๊ธฐ๋๋ค. ๊ทธ๋์ State๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ฒ์ฒ๋ผ render()์ ๋งค๋ฒ ํธ์ถํ ํ์๊ฐ ์๋ค.