๋ฆฌ์กํธ ํ๋ฉด ์ ๋ฐ์ดํธ, ์ธ ๋จ๊ณ๋ก ์ดํดํ๊ธฐ
1. ํธ๋ฆฌ๊ฑฐ (Trigger)
์ํ(state)๋ props๊ฐ ๋ฐ๋ ๋(๋ฆฌ๋ ๋) ๋ฆฌ์กํธ๊ฐ "ํ๋ฉด์ ๋ฐ๊ฟ์ผ๊ฒ ๋ค"๋ผ๊ณ ์ ํธ๋ฅผ ๋ฐ๋ ์๊ฐ
import { useState } from "react";
export default function Counter() {
const [count, setCount] = useState(0);
// 1. ํธ๋ฆฌ๊ฑฐ: ๋ฒํผ์ ๋๋ฅด๋ฉด setCount๊ฐ ์คํ๋จ → ์ํ ๋ณ๊ฒฝ
// 2. ๋ ๋๋ง: Counter ํจ์๊ฐ ๋ค์ ์คํ๋จ → ์ ์ค๊ณ๋(JSX) ์์ฑ
// 3. ์ปค๋ฐ: ๋ฐ๋ ๋ถ๋ถ๋ง ์ค์ ํ๋ฉด(DOM)์ ์ ์ฉ
return (
<button onClick={() => setCount(count + 1)}>
{count}
</button>
);
}
- ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด `setCount(count + 1)`์ด ์คํ.
- ์ด๊ฒ ๋ฐ๋ก ํธ๋ฆฌ๊ฑฐ (์ํ๊ฐ ๋ฐ๋์์ผ๋, ๋ฆฌ์กํธ๊ฐ ๋ ๋๋ง์ ์์ํจ)
2. ๋ ๋๋ง (Rendering)
"์ง๊ธ ์ํ๋ก ํ๋ฉด์ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง" ๋ฆฌ์กํธ๊ฐ ์ปดํฌ๋ํธ ํจ์๋ฅผ ๋ค์ ์คํํด์ ์ค๊ณ๋(๊ฐ์ DOM)๋ฅผ ๋ง๋๋ ๋จ๊ณ
- ์ ์ฝ๋์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด
React๊ฐ `Counter`ํจ์๋ฅผ ๋ค์ ์คํํด์
`retrun (<button..>{counter}</button>)` ์ ๋ง๋ ๋ค. - ์ด ๋ count๊ฐ 1๋ก ๋ฐ๋์๋ค๋ฉด
์ ์ค๊ณ๋์์๋ `<button>1</button>`์ด ๋ค์ด์๋ค. - ์์ง ์ค์ ํ๋ฉด(DOM)์ ์ ๋ฐ๋
(๋ฆฌ์กํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก "์ด๋ป๊ฒ ๋ฐ๊ฟ์ง" ๋ฏธ๋ฆฌ ๊ณ์ฐ๋ง ํจ)
3. ์ปค๋ฐ (Commit)
๋ ๋๋ง ๋จ๊ณ์์ ๋ฐ๊ฟ ๋ถ๋ถ์ด ์์ผ๋ฉด, ์ค์ DOM์ ์ ์ฉํ๋ ๋จ๊ณ
- ๋ฆฌ์กํธ๊ฐ ์ด์ ์ค๊ณ๋์ ์ ์ค๊ณ๋๋ฅผ ๋น๊ตํด์
'๋ฒํผ ๋ด์ฉ์ด 0์์ 1๋ก ๋ฐ๋์๋ค?' ๋ผ๊ณ ํ๋จ - ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ฒํผ ํ ์คํธ๋ฅผ 1๋ก ๋ฐ๊ฟ
์ดํดํ๋์ง ์ฒดํฌโ
[ํธ๋ฆฌ๊ฑฐ]์ฒ์ ํ๋ฉด์ด ๋ํ๋ ๋๋ ํธ๋ฆฌ๊ฑฐ(๋ ๋๋ง์ ์์ํ๋ ์ ํธ) → ๋ฒํผ์ ํด๋ฆญํด์ count๊ฐ ๋ฐ๋๋ ์๊ฐ๋ ํธ๋ฆฌ๊ฑฐ
(์ฆ, "ํ๋ฉด์ ๋ฐ๊ฟ์ผ ํ ์ด์ (์ ํธ)"๊ฐ ์๊ธฐ๋ ๋ชจ๋ ์๊ฐ์ด ํธ๋ฆฌ๊ฑฐ์ด๋ค.)
→ [๋ ๋๋ง]๋ฒํผ์ ํด๋ฆญํด์ count๊ฐ ๋ฐ๋๋ฉด, React๊ฐ ์ปดํฌ๋ํธ ํจ์๋ฅผ ๋ค์ ์คํ → ์ง๊ธ ์ํ(count + 1)๋ก ํ๋ฉด์ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง ๊ฐ์DOM(์ค๊ณ๋)๋ฅผ ๋ง๋ ๋ค.
→ [๋น๊ต]์ด์ ๊ฐ์DOM๊ณผ ์ ๊ฐ์ DOM์ ๋น๊ตํด [์ปค๋ฐ]๋ฐ๋ ๋ถ๋ถ๋ง ํ๋ฉด์ ๋ฐ์
1. ํธ๋ฆฌ๊ฑฐ: ์ํ๋ props๊ฐ ๋ฐ๋๋ ์ ํธ(์ฒ์ ๋ ๋, ๋ฒํผ ํด๋ฆญ ๋ฑ)
2. ๋ ๋๋ง: ์ ๊ฐ์DOM(์ค๊ณ๋) ๋ง๋ค๊ธฐ
3. ๋น๊ต: ์ด์ ์ค๊ณ๋์ ์ ์ค๊ณ๋ ๋น๊ต
4. ์ปค๋ฐ: ๋ฐ๋ ๋ถ๋ถ๋ง ์ค์ ํ๋ฉด์ ์ ์ฉ