Hook
ํจ์ ์ปดํฌ๋ํธ์์ ์ํ(state)๋ ์๋ช ์ฃผ๊ธฐ(lifecycle) ๊ฐ์ ๊ธฐ๋ฅ์ ์ธ ์ ์๊ฒ ํด์ฃผ๋ ํจ์๋ค.
Hook์ด ์ถ๊ฐ๋ ์ด์
์ปดํฌ๋ํธ ์ฌ์ด์์ ์ํ ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค.
๐ ์ํ ๋ก์ง์ “๊ธฐ๋ฅ ๋จ์”๋ก ๋ถ๋ฆฌํ๊ธฐ๊ฐ ํ๋ค์๋ค.
๋ณต์กํ ์ปดํฌ๋ํธ๋ค์ ์ดํดํ๊ธฐ ์ด๋ ต๋ค.
๐ ์ํ ๋ก์ง๊ณผ ์ฌ์ด๋ ์ดํํธ๊ฐ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ณ๋ก ํฉ์ด์ ธ ์๋ก ๊ด๋ จ ์๋ ์ฝ๋๋ค์ด ํ๋์ ๋ฉ์๋์ ์์ด๊ธฐ ์ฌ์ ๋ค.
์ฌ๋๊ณผ ๊ธฐ๊ณ๋ฅผ ํผ๋์ํจ๋ค.
๐ JavaScript์ this ๋์ ๋ฐฉ์๊ณผ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐ์ธ๋ฉ์ผ๋ก ์ธํด ์ดํด๊ฐ ์ด๋ ค์ ๋ค.
1. ์ํ(State) ๊ด๋ฆฌ ํ : ์ปดํฌ๋ํธ๊ฐ ๊ธฐ์ตํด์ผ ํ ๊ฐ์ ๋ค๋ฃจ๋ ํ
useState
์ปดํฌ๋ํธ๊ฐ ๊ธฐ์ตํด์ผ ํ๋ ๊ฐ์ ์ ์ฅํ๊ณ , ๊ทธ ๊ฐ์ ๋ฐ๊พธ๋ฉด ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๋ค.
2. ์ฌ์ด๋ ์ดํํธ(Effect) ํ : ๋ ๋๋ง ‘์ธ๋ถ’ ์์ ์ ๋ค๋ฃจ๋ ํ
useEffect
์์กด์ฑ โ : ๋ ๋๋ง ๋ ๋๋ง๋ค ์คํ
๋น์ด์๋ ์์กด์ฑ ๋ฐฐ์ด: ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ํ ๋ฒ ์คํ(StrictMode์์ 2๋ฒ์ฒ๋ผ)
๊ฐ์ด ์๋ ์์กด์ฑ ๋ฐฐ์ด: ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ์คํ๋๊ณ ์์กด์ฑ ๋ฐฐ์ด์ ์ํ๊ฐ ๋ฐ๋ผ ๋ค์ ์คํํ๋ค.
useLayoutEffect
DOM ๋ฐ์ ์งํ, ํ๋ฉด ๊ทธ๋ฆฌ๊ธฐ ์ ์ ์คํํ๋ค.
3. ๋ฉ๋ชจ์ด์ ์ด์ (์ต์ ํ) ํ : ๋ถํ์ํ ์ฌ๊ณ์ฐ, ์ฌ์์ฑ์ ๋ฐฉ์งํ๋ ํ
* ๋ฉ๋ชจ์ด์ ์ด์
ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๊ณ ๋์ผํ ์ ๋ ฅ์ด ๋ค์ ๋ฐ์ํ ๋ ๋ถํ์ํ๊ฒ ๋ค์ ๊ณ์ฐํ๋ ๋์
์บ์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์
useMemo
๊ฐ์ ์บ์ฑํ์ฌ ๋ถํ์ํ ์ฌ๊ณ์ฐ์ ๋ง๋๋ค.
useCallback
ํจ์๋ฅผ ์บ์ํ์ฌ ๋ถํ์ํ ํจ์ ์ฌ์์ฑ์ ๋ง๋๋ค.
์ผ๋ฐ ํจ์๋ ๋ ๋๋ง๋ ๋ ๊ธฐ์กด ํจ์๋ ๊ฐ๋น์ง ์ปฌ๋ ์
๋๊ณ ์๋ก์ด ํจ์๊ฐ ์์ฑ๋๋ ๋จ์ํ ์์
์ ํ๋ค.
๋ฐ๋ฉด, useCallback์ ์ฌ์ฉํ๋ฉด ์์กด์ฑ ํ์ธ์ ์ํด ์ข
์๋ ๊ฐ๋ค์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ฉฐ,
๋งค ๋ ๋๋ง ์๋ง๋ค ํด๋น ๊ฐ๋ค์ ๋น๊ตํด์ผ ํ๋ค.
ํจ์ ์ ์๋ฅผ ์ํด์ ๋ฐฐ์ด์ ํ ๋นํด์ผ ํ๊ณ ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
๋ฉ๋ชจ์ด์ ์ด์ ์ด ํ์ํ ๊ฒฝ์ฐ
1. ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ
- ์๋นํ ์๊ฐ์ด๋ ๋ฆฌ์์ค๊ฐ ์์๋๋ ํจ์๋ ๊ณ์ฐ์ด ์๋ ๊ฒฝ์ฐ
- ์ฐ์ฐ ํน์ ์ฒ๋ฆฌ๋์ด ๋งค์ฐ ๋ง์์ ๋ ๋๋ง์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ
2. ์์ ์ปดํฌ๋ํธ์ ํจ์๋ฅผ props๋ก ๋๊ธธ ๋
- ๋ถ๋ชจ๋ก๋ถํฐ ๋์ผํ props๋ฅผ ๋ฐ๊ณ ๋์ผํ ์ ๋ ฅ์ ๋ํด ๋์ผํ ์ถ๋ ฅ์ ์์ฑํ๋ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ
โก๏ธ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๋ ์ฌ๋ ๋๋ง๋๋ ๊ฒ์ ๋ฐฉ์ง
- ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๊ฑฐ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ๋ก ์ฌ์ฉ๋๋ ์ฝ๋ฐฑ ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ
โก๏ธ ์ฝ๋ฐฑ์ ์์กดํ๋ ์์ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ฉด์ ๋ ๋๋ง ๊ฐ์ ๋์ผํ ํจ์ ์ฐธ์กฐ๊ฐ ์ฌ์ฉ
3. ๋ค๋ฅธ ํ ์ ์์กด์ฑ์ ์ฌ์ฉ๋ ๋
- useEffect์ ์์กด์ฑ ๋ชฉ๋ก์ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ณ์ฐ์ด๋ ๋ ๋๋ง ๊ฐ์ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ
- ์ฝ๋ฐฑ ํจ์ ๋ฑ์ ์์กด์ฑ์ ํฌํจํด์ผ ํ๋ ๊ฒฝ์ฐ
๋ฉ๋ชจ์ด์ ์ด์ ์ด ํ์ ์๋ ๊ฒฝ์ฐ
1. ์์ ์ปดํฌ๋ํธ
- ๋น ๋ฅด๊ฒ ๋ ๋๋ง๋๋ ์๊ณ ๊ฐ๋จํ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ
2. ๊ธฐ๋ณธ์ ์ด๊ฑฐ๋ ๋น ๋ฅธ ์์
- ๊ธฐ๋ณธ ์ฐ์ , ๋ฌธ์์ด ์ฐ๊ฒฐ ๋๋ ๋ฐฐ์ด ์กฐ์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์์
3. (React.memo์ ๊ฒฝ์ฐ) ์์ฃผ ๋ค์ ๋ ๋๋ง๋๋ ์ปดํฌ๋ํธ
- ์ปดํฌ๋ํธ์ props๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
4. ์ฐธ์กฐ(Ref) ํ : ๋ ๋๋ง๊ณผ ๋ฌด๊ดํ ๊ฐ ๋๋ DOM ์ ๊ทผํ๋ ํ
useRef
5. Context ๊ด๋ จ ํ : ์ ์ญ์ฒ๋ผ ๊ณต์ ๋๋ ๊ฐ ์ ๊ทผํ๋ ํ
useContext
์ฐธ๊ณ ์๋ฃ
- https://d2.naver.com/helloworld/9223303
'โ๏ธFront-End > ๐React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [React] ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ์ ๋ ๋๋ง ์ ๋ต: SPA, CSR, SSR, SSG (0) | 2026.01.13 |
|---|