๋ฆฌ์กํธ๋ก ๊ฐ๋ฐํ๋ฉด์ ํ ์ ํญ์ ์ฌ์ฉํ๋๋ฐ, ์ ํํ ์ด ํ ์ด ์ด๋ค ์๋ฏธ์ด๊ณ ์ ์ด๋ ๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด ์ ๋ชจ๋ฅด๋ ๊ฒ ๊ฐ์์ ํ๋ฒ ๋ชจ๋ ๋ฆฌ์กํธ Deep Dive์ ์๋ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
ํ (hook)์ด ๋ญ๋?
ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ํ ์ ์์๋ ์ํ ๊ด๋ฆฌ์ ๋ผ์ดํ์ฌ์ดํด(์๋ช ์ฃผ๊ธฐ) ๋ฉ์๋๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์ฃ .
๋ํ์ ์ธ ํ ์ ๋ํด ์์๋ด ์๋ค.
1.useState
ํจ์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ํ๋ฅผ ์ ์ํ๊ณ , ์ด ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ฃผ๋ ํ ์ด๋ค.
import {useState} from 'react';
const [state, setState] = useState(initialState);
๋ฆฌ์กํธ๋ useState๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํจ์ ๋ด๋ถ์์ ์์ฒด์ ์ผ๋ก ๋ณ์๋ฅผ ์ฌ์ฉํด ์ํ๊ฐ์ ๊ด๋ฆฌํ๋ฉด ๋ฆฌ๋ ๋๋ง์ด ๋์ง ์๋๋ค.
์๋? ๋ฆฌ์กํธ๋ ํจ์ ์ปดํฌ๋ํธ์ return์ ์คํํด ๊ฒฐ๊ณผ๋ฌผ(JSX)์ ์ ์ฅํ๊ณ ๊ทธ๊ฑธ ๊ฐ์ฒด๋ก ๋ณํํด์ ๊ฐ์DOM์ผ๋ก ๋ง๋ ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ์ ๊ฐ์ DOM์ด๋ ๋น๊ตํด์ ์ค์ ๋ณ๊ฒฝ์ฌํญ๋ง DOM์ ๋ฐ์ํ๋ ๋ ๋๋ง ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์ ์ปดํฌ๋ํธ๋ ๋งค๋ฒ ํจ์(return)๋ฅผ ์คํํด ๋ ๋๋ง์ด ์ผ์ด๋๊ณ , ํจ์ ๋ด๋ถ์ ๊ฐ์ ํจ์๊ฐ ์คํ๋ ๋๋ง๋ค ๋ค์ ์ด๊ธฐํ๋๋ค.
๊ทธ๋ ๋ค๋ฉด useState ํ ์ ๊ฒฐ๊ณผ๊ฐ์ ์ด๋ป๊ฒ ํจ์๊ฐ ์คํ๋ผ๋ ๊ทธ ๊ฐ์ ์ ์งํ๊ณ ์์๊น?
๋ฆฌ์กํธ๋ ํด๋ก์ ๋ฅผ ์ด์ฉํ๋ค.
์ด๋ค ํจ์(useState) ๋ด๋ถ์ ์ ์ธ๋ ํจ์(setState)๊ฐ ํจ์(useState)์ ์คํ์ด ์ข ๋ฃ๋ ์ดํ์๋(useState๊ฐ ํธ์ถ๋ ์ดํ์๋) ์ง์ญ๋ณ์์ธ state๋ฅผ ๊ณ์ ์ฐธ์กฐํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํด๋ก์ ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ธ๋ถ์ ํด๋น ๊ฐ์ ๋ ธ์ถ์ํค์ง ์๊ณ ์ค์ง ๋ฆฌ์กํธ์์๋ง ์ธ ์ ์์๊ณ , ํจ์ ์ปดํฌ๋ํธ๊ฐ ๋งค๋ฒ ์คํ๋๋๋ผ๋ useState์์ ์ด์ ์ ๊ฐ์ ์ ํํ๊ฒ ๊บผ๋ด ์ธ ์ ์๊ฒ ๋๋ค.
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ๋ useState์ ๋ณ์ ๋์ ํจ์๋ฅผ ๋๊ธฐ๋ ๊ฒ์ด๋ค.
์ค๋ก์ง state๊ฐ ์ฒ์ ๋ง๋ค์ด์ง ๋๋ง ์ฌ์ฉ๋๋ค.
์ดํ์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์๋๋ค๋ฉด ์ด ํจ์์ ์คํ์ ๋ฌด์๋๋ค.
๋ฆฌ์กํธ์์๋ ๋ ๋๋ง์ด ์คํ๋ ๋๋ง๋ค ํจ์ ์ปดํฌ๋ํธ์ ํจ์๊ฐ ๋ค์ ์คํ๋๋ค๋ ์ ์ ๋ช ์ฌํ์.
๊ฒ์ผ๋ฅธ ์ด๊ธฐํ๋ ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ด ์๊ตฌ๋ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
(์คํ ๋ฆฌ์ง ์ ๊ทผ, map, filter, find ๊ฐ์ ๋ฐฐ์ด์ ๋ํ ์ ๊ทผ, ์ด๊น๊ฐ ๊ณ์ฐ์ ์ํด ํจ์ ํธ์ถ์ด ํ์ํ ๋..)
2.useEffect
์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ ์๋๋ผ, ์ ํ๋ฆฌ์ผ์ด์ ๋ด ์ปดํฌ๋ํธ์ ์ฌ๋ฌ ๊ฐ๋ค์ ํ์ฉํด ๋๊ธฐ์ ์ผ๋ก ๋ถ์ ํจ๊ณผ(์ฌ์ด๋ ์ดํํธ)๋ฅผ ๋ง๋๋ ๋งค์ปค๋์ฆ์ด๋ค.
function Component(){
useEffect(() => {
//do something
}, [props, state]);
}
์ฒซ๋ฒ์งธ ์ธ์๋ก๋ ์คํํ ๋ถ์ ํจ๊ณผ๊ฐ ํฌํจ๋ ํจ์๋ฅผ, ๋๋ฒ์งธ ์ธ์๋ก๋ ์์กด์ฑ ๋ฐฐ์ด์ ์ ๋ฌํ๋ค.
์์กด์ฑ ๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค useEffect์ ์ฒซ ๋ฒ์งธ ์ธ์์ธ ์ฝ๋ฐฑ์ ์คํํ๋ค.
ํด๋ฆฐ์ ํฉ์์ ๋ชฉ์
์ผ๋ฐ์ ์ผ๋ก ์ด ํด๋ฆฐ์ ํจ์๋ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๊ณ ์ง์ธ ๋ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๋ ค์ ธ ์๋ค.
useEffect๋ ์ฝ๋ฐฑ์ด ์คํ๋ ๋๋ง๋ค ์ด์ ์ ํด๋ฆฐ์
ํจ์๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ ํด๋ฆฐ์
ํจ์๋ฅผ ์คํํ ๋ค์ ์ฝ๋ฐฑ์ ์คํํ๋ค.
๋ฐ๋ผ์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ์ด์ ์ ๋ฑ๋กํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ญ์ ํ๋ ์ฝ๋๋ฅผ ํด๋ฆฐ์
ํจ์์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฌดํํ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
์ธ๋ง์ดํธ ๊ฐ๋ ์ด๋ผ๊ธฐ๋ณด๋ค๋ ํจ์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ ๋ ์์กด์ฑ ๋ณํ๊ฐ ์์์ ๋น์ ์ด์ ์ํ๋ฅผ ์ฒญ์ํด ์ฃผ๋ ๊ฐ๋ ์ผ๋ก ๋ณด๋ ๊ฒ์ด ์ณ๋ค.
์์กด์ฑ ๋ฐฐ์ด
1.๋น ๋ฐฐ์ด
2.์๋ฌด๋ฐ ๊ฐ๋ ๋๊ธฐ์ง ์๊ธฐ
3.์ฌ์ฉ์๊ฐ ์ง์ ์ํ๋ ๊ฐ์ ๋ฃ๊ธฐ
๋น๋ฐฐ์ด์ด๋ฉด ์ต์ด ๋ ๋๋ง ์งํ์ ์คํ๋ ๋ค์๋ถํฐ๋ ๋์ด์ ์คํ๋์ง ์๋๋ค. (useEffect๋ ์ธ์ ๋ ๋ ๋๋ง ๋ ํ์ ์คํ)
์๋ฌด๋ฐ ๊ฐ๋ ๋๊ธฐ์ง ์์ผ๋ฉด ๋ ๋๋งํ ๋๋ง๋ค ์คํ์ด ํ์ํ๋ค๊ณ ํ๋จํด ๋ ๋๋ง์ด ๋ฐ์ํ ๋๋ง๋ค ์คํ๋๋ค.
๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๊ฐ์ด ๋ณํ ๋๋ง๋ค ์คํ๋๋ค.
(useEffect๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์ ์คํ๋๋ ๊ฒ์ ๋ณด์ฅํด์ค๋ค. ์๋ฒ์์ ์คํ๋๋ฉด ํจ์ ์ปดํฌ๋ํธ์ ๋ฐํ์ ์ง์ฐ์ํค๊ณ ๋ฌด๊ฑฐ์ด ์์ ์ผ ๊ฒฝ์ฐ ๋ ๋๋ง์ ๋ฐฉํดํ๋ฏ๋ก ์ฑ๋ฅ์ ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.)
์ฆ, useEffect๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ํ์ ์ด๋ ํ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํค๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ํ ์ด๋ค.
3.useRef
useRef๋ ์ฐธ์กฐ๋ฅผ ์์ฑ(๊ฐ์ฒด๋ฅผ ๋ฐํ)ํ๊ณ ๊ด๋ฆฌํ๋ ํ ์ด๋ค.
useState์ ๋์ผํ๊ฒ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ ๋๋ง์ด ์ผ์ด๋๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๊ฐ์ ์ ์ฅํ๋ค๋ ๊ณตํต์ ์ด ์๋ค.
ํ์ง๋ง ํฐ ์ฐจ์ด์ ์ด ์๋ค.
1. ๋ฐํ๊ฐ์ธ ๊ฐ์ฒด ๋ด๋ถ์ ์๋ current๋ก ๊ฐ์ ์ ๊ทผ ๋๋ ๋ณ๊ฒฝํ ์ ์๋ค.
2. ๊ทธ ๊ฐ์ด ๋ณํ๋๋ผ๋ ๋ ๋๋ง์ ๋ฐ์์ํค์ง ์๋๋ค.
๊ทธ๋ฆฌ๊ณ useRef๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋๋ง ์์ฑ๋๋ฉฐ, ์ปดํฌ๋ํธ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ ๊ฐ๊ฐ ๋ณ๊ฐ์ ๊ฐ์ ๋ฐ๋ผ๋ณธ๋ค.
DOM ์์์ ์ง์ ์ ๊ทผํ ๋ ๋ง์ด ์ฌ์ฉํ๊ณ ,
useRef๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ฐธ์กฐ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ์๋ก ์์ฑ๋์ง ์๊ณ , ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๊ฑฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ํ ๋๊ธฐ ์ ๊น์ง ๊ธฐ์กด์ ์์ฑํ ์ฐธ์กฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ค. => ๊ทธ๋์ ๋ฆฌ๋ ๋๋ง์ ๋ฐ์์ํค์ง์๋๊ฑฐ๊ตฌ๋..
'๐Book' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋ ๋ฆฌ์กํธ Deep Dive] 2.4 ๋ ๋๋ง์ ์ด๋ป๊ฒ ์ผ์ด๋๋๊ฐ? (1) | 2025.01.17 |
---|---|
[๋ชจ๋ ๋ฆฌ์กํธ Deep Dive] 05์ฅ ๋ฆฌ์กํธ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2024.07.02 |