๊ฐ์ - Section 7 : ๋ผ์ดํ์ฌ์ดํด
์ ๋ฐ๋ฏธ : https://www.udemy.com/course/winterlood-react-basic/
์ธํ๋ฐ :
[2024] ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ(React.js) : ๊ธฐ์ด๋ถํฐ ์ค์ ๊น์ง ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ
์ด์ ํ Winterlood | ๊ฐ๋ ๋ถํฐ ๋ ํนํ ํ๋ก์ ํธ๊น์ง ํจ๊ป ๋ค๋ค๋ณด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฆฌ์กํธ๋ฅผ ์ด ๊ฐ์๋ก ํ ๋ฒ์ ๋๋ด์. ํ์ต์ ์งง๊ฒ, ์์ฉ์ ๊ธธ๊ฒ 17์๊ฐ ๋ถ๋์ All-in-one ๊ฐ์!, ๋ฆฌ์กํธ, ํ ๊ฐ์๋ก
www.inflearn.com
๋ผ์ดํ์ฌ์ดํด์ด๋?
* ๋ผ์ดํ์ฌ์ดํด ์ด๋? ์ปดํฌ๋ํธ์ ์์ฑ, ์ ๋ฐ์ดํธ, ์ ๊ฑฐ ๊ณผ์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ค์ ์งํฉ์ด๋ค. ์์ ์ฃผ๊ธฐ๋ฅผ ๋ปํ๋ ๋จ์ด์ด๋ฉฐ ์ด ๊ณผ์ ์ ํฌ๊ฒ ์ธ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
1. Mount(ํ์)
- ์ปดํฌ๋ํธ๊ฐ ํ์ํ๋ ์๊ฐ
- ํ๋ฉด์ ์ฒ์ ๋ ๋๋ง ๋๋ ์๊ฐ
=> A ์ปดํฌ๋ํธ๊ฐ Mount ๋์๋ค! ๋ผ๊ณ ๋งํ๋ ๊ฒ์ A ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ์ฒ์์ผ๋ก ๋ ๋๋ง ๋์๋ค ๋ผ๋ ๋ป
2. Update(๋ณํ)
- ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋๋ ์๊ฐ
- ๋ฆฌ๋ ๋๋ง ๋ ๋๋ฅผ ์๋ฏธ
=> A ์ปดํฌ๋ํธ๊ฐ Update ๋์๋ค! ๋ผ๊ณ ๋งํ๋ ๊ฒ์ A ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋์๋ค ๋ผ๋ ๋ป
3. UnMount(์ฃฝ์)
- ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๋ ์๊ฐ
- ๋ ๋๋ง์์ ์ ์ธ๋๋ ์๊ฐ์ ์๋ฏธ;
=> A ์ปดํฌ๋ํธ๊ฐ UnMount ๋์๋ค! ๋ผ๊ณ ๋งํ๋ ๊ฒ์ A ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ก๋ค ๋ผ๋ ๋ป
* ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด ์์
Mount(์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์์ ) → Update(์ด๋ค ๊ฐ์ด ๋ณ๊ฒฝ๋์๋์ง ์ฝ์์ ์ถ๋ ฅ) → UnMount(์ปดํฌ๋ํธ๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ)
useEffect ์ฌ์ฉํ๊ธฐ
* useEffect๋? ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ดํธ ์ดํํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ (Hook)์ด๋ค.
(์ฌ๊ธฐ์ ์ฌ์ด๋ ์ดํํธ๋, ์ปดํฌ๋ํธ์ ์ฃผ์ ๋ชฉ์ (๋ ๋๋ง UI)์ธ์ ๋ฐ์ํ๋ ๋ถ์์ ์ธ ์์ ์ ๋งํ๋ค. ๋ฆฌ์กํธ์ ์ฃผ์ ๋ชฉ์ ์ UI๋ฅผ ๋ ๋๋งํ๋ ๊ฒ์ด์ง๋ง, ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ(API ํธ์ถ), DOM์ ์ง์ ์กฐ์ํ๊ธฐ, ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๊ฑฐ๋ ์ํ๋ฅผ ์ ์ฅํ๊ธฐ, WebSoKet ์ฐ๊ฒฐ ๊ด๋ฆฌ ๋ฑ ์ธ๋ถ์์ ์์ ์ด ๋ฐ์ํ๋ค. ์ด๋ฅผ ๋ชจ๋ ์ฌ์ด๋ ์ดํํธ๋ผ ํ๋ค)
* useEffect ๊ธฐ๋ณธ ๋ฌธ๋ฒ
useEffect(effectFunction, dependencyArray);
- effectFunction : ์คํํ ๋์์ ์ ์ํ ์ฝ๋ฐฑ ํจ์. ์ด ํจ์๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ์ดํ์ ์คํ๋๋ค.
- dependencyArray : ์์กด์ฑ ๋ฐฐ์ด๋ก, ์ด ๋ฐฐ์ด์ ํฌํจ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง effectFunction์ด ์คํ๋๋ค(deps๋ผ๊ณ ๋ ๋ถ๋ฆผ)
· ๋น ๋ฐฐ์ด [ ] : ๋ง์ดํธ ์ ํ ๋ฒ๋ง ์คํ
· ๊ฐ์ด ์๋ ๋ฐฐ์ด [state, props] : ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์คํ
· ์๋ต : ๋ ๋๋ง๋ ๋๋ง๋ค ์คํ
* useEffect ์์
function App() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log(`count : ${count}`)
}, [count]);
const onClickButton = (value) => {
setCount(count + value);
}
return (
<div className="App">
<h1>Simple Counter</h1>
<section>
<Viewer count = {count}/>
</section>
<section>
<Controller onClickButton = {onClickButton}/>
</section>
</div>
)
}
export default App
- ์์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด count๊ฐ ๋ณํํ ๋ ๋ง๋ค console์ฐฝ์ count ๊ฐ์ด ๋์ค๊ฒ ๋๋ค.
* ๊ทธ๋ ๋ค๋ฉด, ํด๋ฆญ ์ด๋ฒคํธ ์์ ๋ฃ๋๋ค๋ฉด?
const onClickButton = (value) => {
setCount(count + value);
console.log(`count : ${count}`);
}
- useEffect๊ฐ ๊ผญ ํ์ํ ๊น? onClickButton ์ด๋ฒคํธ ์์ setCount๋ก ๊ฐ์ ๋ฐ๊พผ ํ ๊ทธ ๊ฐ์ console์ ์ถ๋ ฅํ๋ค๋ฉด?
: ๊ฒฐ๋ก ์ ์๋จ! ์ด์ ๋ setState๋ ๋น๋๊ธฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ. ์ฆ, ์ํ๊ฐ ์ฆ์ ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์๋๋ผ ๋ ๋๋ง ์์ ์ด ๋๋ ํ ์ ๋ฐ์ดํธ๊ฐ ๋๋ค.
- ๋ฆฌ์กํธ๋ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ฌ๋ฌ ์ํ ๋ณ๊ฒฝ ์์ฒญ(setState)์ ๋ชจ์ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ณ ํจ์จ์ ์ผ๋ก ํ๋ฉด์ ์ ๋ฐ์ดํธ ํ๋ค.
- ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ์ ์ ์คํ ํ๋ฆ์ ์ ์ด๋ณด์๋ฉด,
โ onClickButton( value ) ์คํ
โก setCount( count + value ) ํธ์ถํ์ฌ ์ํ ๋ณ๊ฒฝ ์์ฒญ(์์ง ์์ฒญ๋ง!!)
โข console.log(`count : ${count}`) ์คํ. ์์ง ์ํ๊ฐ(count)๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฏ๋ก ๋ณ๊ฒฝ ์ด์ ์ ๊ฐ ์ถ๋ ฅ // 0
โฃ ๋ฆฌ์กํธ ์ํ ๋ณ๊ฒฝ ์์ (๋น๋๊ธฐ ์ฒ๋ฆฌ)
โค ์๋ก์ด ์ํ๊ฐ์ผ๋ก ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง
โฅ count๊ฐ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ useEffect ์คํ // 1
useEffect๋ก ๋ผ์ดํ์ฌ์ดํด ์ ์ดํ๊ธฐ
* Mount
useEffect(() => {
console.log("mount!");
}, []);
- useEffect์ deps๊ฐ ๋น ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ๋ ๋ ํ ๋ฒ๋ง ์คํ๋๋ค. ์ด ํจํด์ ์ด๊ธฐํ ์์ ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค(๋ฐ์ดํฐ ๋ก๋, ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก ๋ฑ์ ์ฌ์ฉ)
* Update
useEffect(() => {
console.log("update!");
});
- useEffect์ deps๊ฐ ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฆฌ๋ ๋๋ง ์ ์คํ๋๋ค(์ํ ๋ณ๊ฒฝ ๋ก๊ทธ ์ถ๋ ฅ, DOM ์ํ ๋ณ๊ฒฝ ๊ฐ์ง ๋ฑ์ ์ฌ์ฉ๋๋ค)
* UnMount
useEffect(() => {
// ํด๋ฆฐ์
, ์ ๋ฆฌํจ์
return () => {
console.log("unmout");
}
}, []);
- useEffect์์์ return์ผ๋ก ๋ฐํ๋ ํจ์๋ ์ ๋ฆฌ(clean-up)ํจ์๋ก ๋์ํ๋ค. ์ ๋ฆฌํจ์๋ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋, ์์กด์ฑ ๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋์ด useEffect๊ฐ ๋ค์ ์คํ๋๊ธฐ ์ง์ ์ ์๋์ผ๋ก ํธ์ถ๋๋ค.
'IT > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - ํ๋ก์ ํธ 1 (์นด์ดํฐ ์ฑ) (0) | 2024.11.25 |
---|---|
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 3 (0) | 2024.11.25 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 2 (1) | 2024.11.22 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 1 (1) | 2024.11.19 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ๊ฐ๋ก (1) | 2024.11.15 |