์ด๋ฒ ์ฅ์์๋
State์ Props์ ๊ฐ๋ ๊ณผ ์ฐจ์ด์ ์ ์์ธํ ๋ค๋ค๋ณผ ์์ ์ ๋๋ค.
์ฌ๋ฌ๋ถ์ React์ state์ ์ผ๋งํผ ์๊ณ ๊ณ์ ๊ฐ์ ? ๋์ ์ฐจ์ด๋ ๋ญ๊น์ ?
๊ฒฐ๋ก ๋ถํฐ ๋ณด์๋ฉด,
state ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํฐ
์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ๋์ ์ธ ๋ฐ์ดํฐ๋ก, ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ฉฐ ์ฃผ๋ก UI์ ๋์์ ์ ์ดํฉ๋๋ค.
props ์ธ๋ถ๋ก๋ถํฐ ์ฃผ์ด์ง ๋ฐ์ดํฐ
๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ๋ก, ์ฃผ๋ก ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์๋ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํ์ ๋ state๊ฐ ์์๋ค๋ฉด.
์ด๋ฅผ ์ํด์ ํ์ด์ง์ ์๋ ๋ฐ์ดํฐ ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋์์ ๋๋ง๋ค DOM์ ์ ๊ทผํ์ฌ ์ง์ ์์ ํด ์ฃผ์์ ๊ฒ์ ๋๋ค.
๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋งํผ ๋น์ฐํ ํ๋ฉด๋ ๋ณ๊ฒฝ๋์ด์ผ ํ๋๊น์
์ฌ๊ธฐ์ ์ ๊น !! ๋ฐ์ธ๋ฉ์ด๋ ๊ฐ๋ ์ ์ง๊ณ ๋์ด๊ฐ์
๋ฐ์ธ๋ฉ์ด๋?
"๋ฌถ๋ค"๋ผ๋ ์ฌ์ ์ ์๋ฏธ๋ก, ์ ๊ณต์์ ์๋น์๋ก๋ถํฐ ๋ฐ์ดํฐ ์๋ณธ์ ๊ฒฐํฉ์์ผ ์ด๊ฒ๋ค์ ๋๊ธฐํ์ํค๋ ๊ธฐ๋ฒ
์ฐ๋ฆฌ๊ฐ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ฐ๋ฐํ์ ๋์๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด์ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ผ์น์์ผ ์ฃผ์ด์ผ ํ์ต๋๋ค.
ํ์ง๋ง React์ ๋ฑ์ฅ์ผ๋ก React๊ฐ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋์ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์๊ณ ๋ฅผ ๋๊ฒ ๋์์ต๋๋ค.
state์ ์ญํ
์ฐ๋ฆฌ๋ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ํด React์์ ์ง์ํ๋ state๋ฅผ ์ฌ์ฉํฉ๋๋ค.
state๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๊ฐ์ง๋๋ฉด ์๋์ผ๋ก ํ๋ฉด์ ๋ฆฌ๋ ๋๋ง ํด์ค ์ ์์ต๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ setState์์ state์ ์๋ช ์ฃผ๊ธฐ
๐ ํจ์ํ ์ปดํฌ๋ํธ์์๋ React๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ต์ ํํฉ๋๋ค. useState์ useEffect๋ก ์ํ์ ๋ ๋๋ง ๊ณผ์ ์ ๊ด๋ฆฌํฉ๋๋ค โบ๏ธ
ํด๋์คํ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋๋ฐ ํ์ํ shouldComponentUpdate๋ฅผ ๋์ด์ ์ฌ์ฉํ์ง ์์๋ ๋ฉ๋๋ค
1. setState ํธ์ถ: ์ํ(state) ๋ณ๊ฒฝ
2. ๋ ๋ ํธ๋ฆฌ๊ฑฐ: React๋ ๋ณ๊ฒฝ๋ state๋ฅผ ๊ฐ์งํ๊ณ , ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ๋ฅผ ์์
3. ๋ฆฌ๋ ๋๋ง: React๋ ๊ฐ์๋(Virtual DOM)์ ์๋กญ๊ฒ ์์ฑํ์ฌ ์ด์ ๊ฐ์๋๊ณผ ๋น๊ต
4. DOM ์ ๋ฐ์ดํธ: ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ ๋์ ๋ฐ์
React๋ ํํฅ์ ๋ฐ์ดํฐ ํ๋ฆ
๋ฆฌ์กํธ๋ ํํฅ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๋ฏ๋ก ๋ถ๋ชจ์์ ์์์ผ๋ก props๋ฅผ ๋ณด๋ด๋ ํํ๋ฅผ ๊ฐ์ต๋๋ค.
์ด๋, ์์์ props๊ฐ ๋๊ตฌ๋ก๋ถํฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๋ฌ๋๋์ง ์ ํ ์ ํ์๊ฐ ์์ต๋๋ค.
์ด ๋๋ฌธ์ state๋ฅผ ์ข ์ข ์บก์ํ๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. state๋ฅผ ๊ฐ์ง ์ปดํฌ๋ํธ ์ธ์๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
state์ props์ ์ฐจ์ด
state๋ state๋ฅผ ํด๋น ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํฉ๋๋ค.
state๋ฅผ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋๊ธฐ๋ฉด props๊ฐ ๋๊ณ ์ฝ๊ธฐ ์ ์ฉ์ด ๋ฉ๋๋ค.
* ๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ง์ - JavaScript(Model)์์ HTML(View)๋ก ํ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๋ ๊ฒ
state | props | |
๋ฐ์ดํฐ ์์ ๊ถ | ์ปดํฌ๋ํธ ์์ฒด์์ ๊ด๋ฆฌ | ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ ๋ฌ |
๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ | ๋ณ๊ฒฝ ๊ฐ๋ฅ (setState, useState) | ์ฝ๊ธฐ ์ ์ฉ (์์ ๋ถ๊ฐ) |
์๋ช | ํด๋น ์ปดํฌ๋ํธ ๋ด์์๋ง ์กด์ฌ | ๋ถ๋ชจ์์ ์์์ผ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ |
์ฉ๋ | ๋์ ๋ฐ์ดํฐ ๊ด๋ฆฌ | ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ |
์ด๊ธฐํ ์์น | ์ปดํฌ๋ํธ ๋ด๋ถ (useState ๋๋ state) | ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ค์ |
์ ๊ตณ์ด setState๋ฅผ ์ฌ์ฉํด์ผํ๋ ?
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, state๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ ๊ฒฝ์ฐ์๋ ์๋ก์ด state๋ก ํ๋ฉด์ด ์ ๋ฐ์ดํธ๋์ง ์๊ธฐ ๋๋ฌธ !!
์์์ ์ดํด๋ณธ React Life Cycle๊ณผ ๊ด๋ จ ์์ต๋๋ค.
setState์ ํจ์
ํจ์ ์ฝ๋
import React, { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
const handleIncrement = () => {
// ์ํ๊ฐ ์ฆ์ ๊ฐฑ์ ๋์ง ์์ผ๋ฏ๋ก count๋ ์ด์ ๊ฐ์ ์์กดํจ
setCount(count + 1);
setCount(count + 1); // ์๋๋ 2 ์ฆ๊ฐ์ํค๋ ๊ฒ์ด์ง๋ง ์ค์ ๋ก๋ 1๋ง ์ฆ๊ฐ
};
return (
<div>
<p>Count: {count}</p>
<button onClick={handleIncrement}>Increment</button>
</div>
);
}
export default Counter;
์ด ์ฝ๋์๋ ํจ์ ์ด ์์ต๋๋ค. ์ด ์ฝ๋๋ setCount๋ฅผ 2 ์ฆ๊ฐ์์ผฐ์ง๋ง ์ค์ ๋ก count๋ 1๋ง ์ฆ๊ฐ ํ์ต๋๋ค.
์ด๋ ?! ์๊น setState๋ก ์ํ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ํ์ง ์์๋ ๐ค
์ด์ ๋ setState๋ ๋น๋๊ธฐ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ ๋ ๋๋ง ๋ ๋๊น์ง state๋ฅผ ๊ฐฑ์ ํ์ง ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
setState๋ state๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ ์ฆ๊ฐ์ ์ธ ๋ช ๋ น์ด ์๋ ์์ฒญ์ ๋๋ค
๋จ์ง ์ปดํฌ๋ํธ์๊ฒ ๊ฐฑ์ ๋ state๊ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์ ๋ ๋๋ง ํด์ผ ํ๋ค๊ณ ์๋ฆฌ๋ ์ญํ ์ผ ๋ฟ์ ๋๋ค
๊ทธ๋ ๋ค๋ฉด setCount๋ฅผ 2์ฆ๊ฐ์ํค๊ธฐ ์ํด์ ์ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๋ณ๊ฒฝ ํด์ผํ ๊น ?
setCount((prevCount) => prevCount + 1); // prevCount๋ 0 → 1
setCount((prevCount) => prevCount + 1); // prevCount๋ 1 → 2 (๊ฒฐ๊ณผ: 2)
setCount์ ์ฝ๋ฐฑ์ ์ ๋ฌํ๋ฉด ์ด์ ์ํ๋ฅผ ์์ ํ๊ฒ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์์ ๊ฐ์ด ์์ ํ๋ฉด ์๋๋๋ก count๊ฐ 2์ฉ ์ฆ๊ฐํฉ๋๋ค.
์ ์ฝ๋ฐฑ์ ์ ๋ฌํด์ผ ์์๋๋ก ๋์ํ๊ฒ ๋๋๊ฑธ๊น? ๋ ๋ฐฉ์์ ํ๋ฆ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ๊ฐ์ ์ง์ ์ฌ์ฉํ๋ ๋ฐฉ์
setCount(count + 1);
- ์ฌ๊ธฐ์ count๋ ํ์ฌ ๋ ๋๋ง ์์ ์ ์ํ๊ฐ์ ๋๋ค.
- ์ํ ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ๋ก ๋์ํ๋ฏ๋ก, setCount๋ฅผ ํธ์ถํ ์์ ์ count์ ๊ฐ์ ์์ง ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
- ๋์ผํ ๋ ๋๋ง ์ฌ์ดํด ๋ด์์ ์ฌ๋ฌ ๋ฒ setCount(count + 1)๋ฅผ ํธ์ถํ๋ฉด ์ด์ ์ํ๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ด ์๋๋ผ ๋์ผํ ๊ฐ(count)์ ๊ณ์ +1์ ์ํํฉ๋๋ค.
2. ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
setCount((prevCount) => prevCount + 1);
- ์ด ๋ฐฉ์์์๋ ์ด์ ์ํ๊ฐ(prevCount)์ ์ฝ๋ฐฑ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์์ ํ๊ฒ ์ฐธ์กฐํฉ๋๋ค.
- React๋ ์ํ ์ ๋ฐ์ดํธ๊ฐ ์์ฒญ๋ ์์๋๋ก ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก, ์ด์ ๊ฐ์ ์์กดํ๋ ์ฐ์ฐ์ ์ ํํ ์ํํ ์ ์์ต๋๋ค.
- ๋ฐ๋ผ์ ๋์ผํ ๋ ๋๋ง ์ฌ์ดํด ๋ด์์ ์ฌ๋ฌ ๋ฒ ํธ์ถํด๋ ์์ฐจ์ ์ผ๋ก ์ํ๊ฐ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
ํน์ง | ๊ฐ ์ฌ์ฉ (count + 1) | ์ฝ๋ฐฑ ์ฌ์ฉ ((prevCount) => prevCount + 1) |
์ ๋ฐ์ดํธ ๊ธฐ์ค | ํ์ฌ ๋ ๋๋ง ์์ ์ ์ํ๊ฐ | ์ต์ ์ํ๊ฐ (์ ๋ฐ์ดํธ ์์๋๋ก ์ฐธ์กฐ) |
React์ ์ญํ | ์ฌ๋ฌ setState ํธ์ถ์ ๋ณํฉํ์ฌ ํ ๋ฒ์ ๋ ๋๋ง ์ํ | ๊ฐ ์ฝ๋ฐฑ์ ์์๋๋ก ์คํํ๋ฉด์ ์ค๊ฐ ์ํ๋ฅผ ๋ฐ์ |
์ฌ์ฉ ์ฌ๋ก | ๋ ๋ฆฝ์ ์ธ ์ํ ๊ฐฑ์ | ์ด์ ์ํ์ ์์กดํ๋ ์ํ ๋ณ๊ฒฝ |
๊ฒฐ๊ณผ | ์ํ๊ฐ ์๋๋ณด๋ค ์ ๊ฒ ๋๋ ์๋ชป ์ ๋ฐ์ดํธ๋จ | ์ํ๊ฐ ์ ํํ ๋ฐ์๋จ |
์ ? ๊ตณ์ด setState๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ ๊ฑธ๊น
๋ฐ๋ก ๊ฒฐ๋ก ์ ๋งํ์๋ฉด, ์ฐ์์ ์ผ๋ก state๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ณ๊ฒฝ ํ์๋งํผ ๋ฆฌ๋ ๋๋ง์ ์งํํ๋ค๋ฉด ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํค๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ ๊ฒ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ๋ถ๋ชจ, ์์ ์ปดํฌ๋ํธ ๋ ๋ค setStat๋ฅผ ์คํํ๋ค๊ณ ๊ฐ์ ํ ๊ฒฝ์ฐ
์์ ์ปดํฌ๋ํธ๋ setState๋ฅผ ์คํํ์๋ง์ ๋ฆฌ๋ ๋๋ง ๋ฉ๋๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ๋ setState๋ฅผ ์คํํ์๋ง์ ๋ฆฌ๋ ๋๋ง ๋์ง๋ง ๋ถ๋ชจ์ ์ํด ์์์ ๋ถํ์ํ ๋ ๋๋ง์ ํ๋ฒ . ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ n๋ฒ์ ๋ณ๊ฒฝ๋งํผ n๊ฐ์ ๋ ๋๋ง์ด ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์
setState์ ์คํ์ ์ง์ฐ์ํค๊ณ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ํ ๋ฒ์ ๊ฐฑ์ ํ๋ ๊ฒ์ ๋ฐฐ์น ์ฒ๋ฆฌ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๋น๊ต
์์์ ์์ฑํ ๊ฐ์ฌ์ฉ ์ ์์๋๋ก ๋์ํ์ง ์๋ ๋ถ๋ถ์ ๋ฐฐ์น์ฒ๋ฆฌ์ ์ฐ๊ด์ง์ด๋ณด๊ฒ ์ต๋๋ค.
๋ฐฐ์น ์ฒ๋ฆฌ์ ๊ฐ๋
๋ฐฐ์น ์ฒ๋ฆฌ๋ ?
๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ์ง ์๊ณ ์ข ํฉํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฒ
React๊ฐ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ๋์ผ ๋ ๋๋ง ์ฌ์ดํด์์ ์ฌ๋ฌ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ณํฉํ์ฌ ํ ๋ฒ์ ๋ ๋๋ง๋ง ์ํํ๋ ๊ฐ๋ ์ ๋๋ค.
1. `setCount(count + 1)` ํธ์ถ
2. `setCount(count + 1)` ํธ์ถ
-----------------------------------
[ React Batch Queue ]
| count + 1 |
| count + 1 |
-----------------------------------
→ ๋ณํฉ ์ฒ๋ฆฌ: count๋ 0 → 1
→ ๋ ๋๋ง 1ํ ์ํ (๊ฒฐ๊ณผ: count = 1)
React์ ๋ฐฐ์น ์ฒ๋ฆฌ(batch processing)
React๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๋์ผํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด์์ ์ฌ๋ฌ setState ํธ์ถ์ ๋ณํฉํ์ฌ ํ๋์ ๋ ๋๋ง ์์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- setCount(count + 1)์ ๋ ๋ฒ ํธ์ถํ๋ฉด, React๋ ํ์ฌ ๋ ๋๋ง ์์ ์ count ๊ฐ(์: 0)์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ์ setState๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ ํธ์ถ ๋ชจ๋ ๋์ผํ ๊ฐ(0)์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๋ฏ๋ก ์ต์ข ์ ์ผ๋ก ์ํ๋ 1๋ง ์ฆ๊ฐํฉ๋๋ค.
์๋ ๊ณผ์
- setCount(count + 1) ํธ์ถ → React๊ฐ ์ด ์ ๋ฐ์ดํธ๋ฅผ ํ์ ์ถ๊ฐ
- setCount(count + 1) ํธ์ถ → React๊ฐ ์ด ์ ๋ฐ์ดํธ๋ฅผ ํ์ ์ถ๊ฐ
- React๊ฐ ๋ฐฐ์น ์ฒ๋ฆฌํ๋ฉด์, ๋ง์ง๋ง ์ํ ์ ๋ฐ์ดํธ๋ง ๋ฐ์ → ์ต์ข ์ํ๋ 1
์ ๋ง์ง๋ง ํธ์ถ๋ง ์ ํจํ๊ฐ?
React๋ ๋์ผํ ๋ ๋๋ง ์ฌ์ดํด์์ setState ํธ์ถ์ ๋ณํฉํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ count ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฎ์ด์์์ง๋ฉฐ, ์ด์ ํธ์ถ์ ์ค๊ฐ ์ํ๋ ๋ฐ์๋์ง ์์ต๋๋ค.
2. ์ฝ๋ฐฑ ์ฌ์ฉ (์ด๋ฒคํธ ๋ฃจํ์ ๊ด๋ จ)
1. `setCount((prevCount) => prevCount + 1)` ํธ์ถ
2. `setCount((prevCount) => prevCount + 1)` ํธ์ถ
-----------------------------------
[ React Update Queue ]
| prevCount + 1 | (prevCount = 0 → 1)
| prevCount + 1 | (prevCount = 1 → 2)
-----------------------------------
→ ๊ฐ ์ฝ๋ฐฑ ์คํ ์์๋๋ก ์ฒ๋ฆฌ
→ ๋ ๋๋ง 1ํ ์ํ (๊ฒฐ๊ณผ: count = 2)
์ฝ๋ฐฑ๊ณผ ์ด๋ฒคํธ ๋ฃจํ
์ฝ๋ฐฑ ํํ์ setCount๋ React๊ฐ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ์์๋ฅผ ์ ํํ ๋ณด์ฅํฉ๋๋ค. ๊ฐ ์ฝ๋ฐฑ์ ์ด์ ์ํ ๊ฐ์ ์ฐธ์กฐํ์ฌ ์์ฐจ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ฏ๋ก, ๋ชจ๋ ํธ์ถ์ด ์๋ํ ๋๋ก ๋ฐ์๋ฉ๋๋ค.
์๋ ๊ณผ์
- setCount((prevCount) => prevCount + 1) ํธ์ถ → React๊ฐ ์ฝ๋ฐฑ์ ํ์ ์ถ๊ฐ.
- setCount((prevCount) => prevCount + 1) ํธ์ถ → React๊ฐ ๋ ๋ฒ์งธ ์ฝ๋ฐฑ์ ํ์ ์ถ๊ฐ.
- React๋ ์ฝ๋ฐฑ์ ํ์์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ
- ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ: prevCount๋ 0 → ์ํ ์ ๋ฐ์ดํธ ํ count๋ 1.
- ๋ ๋ฒ์งธ ์ฝ๋ฐฑ: prevCount๋ 1 → ์ํ ์ ๋ฐ์ดํธ ํ count๋ 2.
๋๋์
React์ ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ ๊ฐ๊ฒฐํ๋ฉด์๋ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ๋๊ผ์ต๋๋ค. ํนํ setState์ ๋น๋๊ธฐ์ ๋์์ด ์ฑ๋ฅ ์ต์ ํ์ ํฌ๊ฒ ๊ธฐ์ฌํ๋ฉฐ, ๋ฐฐ์น ์ฒ๋ฆฌ๋ผ๋ ๊ฐ๋ ์ ๋์ ํ ์ ๋ ์์ธํ ์๊ฒ๋์์ต๋๋ค.
setCount(count + 1)๊ณผ ๊ฐ์ ๋จ์ํ ํธ์ถ์ด ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์๋ค๋ ์ ์ React์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ํฌ์คํ ํด๋ณด๊ณ ์ด์ ์์ผ ์ํ๊ด๋ฆฌ์ ๊ฐ๋ ์ ์ ๋๋ก ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ๋ฐฑ์ ์ฌ์ฉํ์ฌ React์ ์ ๋ฐ์ดํธ ์์๋ฅผ ์ด๋ฒคํธ ๋ฃจํ์ ์ฝ๋ฐฑ ํ์ ๋์์ผ๋ก ์ฐ๊ด์ง์ด ์๊ฐํด๋ณด๋ ๋ ์ดํด๊ฐ ์ ๋์์ต๋๋ค.
React์ ์ค๊ณ์์ ๋ณต์กํ ์ํ ๊ด๋ฆฌ์ UI ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค๋ ค๋ ์๋๊ฐ ์๋ณด์์ต๋๋ค.
์ฐธ๊ณ ์์ - ์ฐ์ํ ํ ํฌ
'๐ฉ๐ปโ๐ป ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ] - Jotai, Context, Zustand ๋น๊ต (1) | 2024.10.16 |
---|---|
[React] - React์์ ์คํ์ผ๋ง์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ (0) | 2024.08.22 |
[React] - useEffect์ ํด๋ฆฐ์ ์ด๋ ? (0) | 2024.08.12 |
[React] - React 18์ ์๋ก์ด API ('createRoot') (0) | 2024.07.30 |