setState๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค.
๊ทธ ์ด์ ๋ ์ด์ state์ ๋ค์ state๋ฅผ ๋น๊ตํ๋ฉฐ ๋ฆฌ๋ ๋๋ง์ ํ๋ ๊ฒ ๋น์ฉ์ด ํฐ ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
setState๋ฅผ ํตํด ์๋ก์ด state๋ก ์ ๋ฐ์ดํธํ๋ ์์ ์ ์ฐ๋ฌ์ 3๋ฒ ๋ฐ์์์ผฐ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
const handleClick = () => {
setState(count + 1);
setState(count + 1);
setState(count + 1);
}
์ด๋ฐ ์์ ์์ ๋ฆฌ์กํธ๋ ์ฌ์กฐ์ ์ ํตํ ๋ฆฌ๋ ๋๋ง์ 3๋ฒ ๋ฐ์์ํค์ง ์๋๋ค. ๋ฆฌ์กํธ๋ ๋๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ตํ์ ์์ ๋ง ๋ฆฌ๋ ๋๋งํ๋ ๊ฒ ๋น์ฉ์ด ์ ๋ค๋ ๊ฑธ ์๊ณ ์๋ค.
๋ฌธ์ ๋ ๊ฐ๋ฐ์์ ์๋์๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค๋ ์ํ์ฑ์ด๋ค. ์์ ์์์์ count๋ ๊ธฐ์กด์ count์์ +3๋ ๊ฐ์ด ์๋ +1๋ก๋ง state๊ฐ ์ค์ ๋๋ค.
const handleClick = () => {
setState(prev => count + 1);
setState(prev => count + 1);
setState(prev => count + 1);
}
๋ค์๊ณผ ๊ฐ์ด ํจ์๋ฅผ ์ ๋ฌํด์ฃผ๋ฉด ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
const handleClick = () => {
setState(prev => count + 3);
}
๋ฌผ๋ก ์ ์ด์ setState๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ ์ผ์ด ์๋๋ก ํ๋๊ฒ ๋ ์ข๋ค.
setState๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ํ๋ ์๋ฆฌ์ ๋ํด ์กฐ๊ธ ์กฐ์ฌํด๋ดค๋ค.
์ผ๋จ ๊ณต์๋ฌธ์์๋ setState๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ ์ฌ์ฉ์ ์ ์ํ๋ผ๋ ๋ง๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ์ด ์ ํ์๊ณ , ๊ทธ์ ๋ํ ๋ด๋ถ์ ์ธ ์๋ฆฌ๋ ์ค๋ช ํ๊ณ ์์ง ์๋ค.
๋น์์ ์ฐธ์กฐ๊ฐ์ด ๋์ผํด์์ผ๊น? ์๋๋ฉด React๊ฐ ๋์ผํ state์ ๋ํด setter๋ฅผ ํธ์ถํ ๋ ์ด์ setter๋ค์ ๋ฌด์ํด์์ผ๊น?
props (โpropertiesโ์ ์ค์๋ง) ์ state ๋ ์ผ๋ฐ JavaScript ๊ฐ์ฒด์ ๋๋ค.
๋ฌธ๋ ์ด๋ฐ ๋ฌธ์ฅ์ด ๋ณด์๋ค. ๋ณด๋ ๊ฒ๊ณผ ๊ฐ์ด state๋ ๊ฐ์ฒด๋ค. ์ด๊ฒ์ ํ ๋๋ก ์กฐ๊ธ ๋ ์กฐ์ฌํ๋ค.
functional-setstate-is-the-future-of-react์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ์ค๋ง๋ฆฌ๋ฅผ ์ก์๋ค.
Object Composition์ด๋ผ๋ ๊ฐ๋ ์ ์๊ฒ ๋์๋ค. ๊ธฐ์กด ๊ฐ์ฒด์ ๋์ผํ ํค ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํ ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ง์ง๋ง ์ ๋ฐ์ดํธ๋ง ์ ์ฉ๋๋ค๋ ๊ฐ๋ ์ด๋ค.
Object.Assign({}, {name: 'lee'}, {name: 'joo'});
๋ฌธ์ฅ์ผ๋ก ํํํ์๋ฉด ์ด๋ ๋ค. ์ต์ข ์ ์ผ๋ก ์ ์ฉ๋๋ ๊ฒ์ ๋ง์ง๋ง์ผ๋ก ์์์ง๋ ๋ ์์ด๋ค.
setState(count + 1);
setState(count + 1);
setState(count + 1);
์์ ํ์์ผ๋ก state๋ฅผ ๋ณ๊ฒฝํ๋ฉด Object Composition์ฒ๋ผ ์ต์ข ์ ์ผ๋ก ๋ฎ์ด์์์ง๋ ๊ฐ์ ๋ง์ง๋ง setState์ด๋ค.
ํด๋น ์์ ์ ์ฐธ์กฐ ๊ฐ์ ๋์ผํ๋ค๋ ์๊ฐ๋ ๊ด๋ํ๊ฒ ๋ณด๋ฉด ์์ฃผ ํ๋ฆฐ ๊ฒ์ ์๋์๋ค.
๊ทธ๋ ๋ค๋ฉด ํจ์ํ ์ ๋ฐ์ดํธ๋ ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ผ๊น?
๋งํฌ๋ก ๋ฃ์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด setState์ ํจ์๋ก ์ธ์๊ฐ ๋ค์ด์ฌ ์ update ํ์ ๋ฃ๊ณ ์์ฐจ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์คํํ๋ค๊ณ ํ๋ค.
Object Composition๊ณผ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์คํํ๋ ๊ฒ์ด๋ค.
๋ฆฌ์กํธ์ ๋ด๋ถ๊ฐ ์ด๋ป๊ฒ ๋์ด์๋์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์์ธํ๊ฒ๋ ์ค๋ช ํ ์ ์๋ค.
const increaseCount = (prev) => {
return prev + 1;
};
const decreaseCount = (prev) => {
return prev - 1;
};
const App = () => {
const [count, setCount] = useState(0);
return (
<>
<div>{count}</div>
<button onClick={() => setCount(increaseCount)}>+</button>
<button onClick={() => setCount(decreaseCount)}>-</button>
</>
);
};
๋ค์๊ณผ ๊ฐ์ด ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด ์ ์ธ์ ์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค!
๋ฉ์ก