2020. 6. 3. 15:26ใETC/Programming
โ Hook์ ์ฌ์ฉํ๋ ์ด์
hook์ด ๋์ค๊ธฐ ์ ์ ์ฌ๋๋ค์ Class๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด์ ๋ hook์ ํตํด state๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฌ๋ฌ react ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
hook ์ด์ ์๋ HOC(Higher Order Component)๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ฐ๋ณตํด์ ์์ฑ์ ํด์ผ ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ์ต๋๋ค.
"HOC"์ด๋ ํ๋ฉด์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ง๋ง์ ๋ถ๋ฆฌํด์ component๋ก ๋ง๋ค๊ณ , ์ฌ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ UI์ ๊ฐ์ ๋ค๋ฅธ ๋ถ๋ถ์ parameter๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ํจํด์ ๋๋ค. ์ฆ, ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ธ์๋ก ๋ฐ์์ ์๋ก์ด ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํดํ๋ ํจ์๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
ํ์ง๋ง HOC์ ์ฌ์ฉํ์ ๋, wrapper hell์ด๋ผ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ์!
"wrapper hell"์ด๋ ์ค์ฒฉ๋๋ component๊ฐ ๋ง์์ ธ depth๊ฐ ๊น์ด์ง๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
LifeCycle API๋ ์ปดํฌ๋ํธ๊ฐ DOM ์์ ์์ฑ๋๊ธฐ ์ ํ ๋ฐ ๋ฐ์ดํฐ๊ฐ ๋ฉด๊ฒฝ๋์ด์ ์์ฑ๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ ํ๋ก ์คํ๋๋ ๋ฉ์๋๋ค์ ์๋ฏธํฉ๋๋ค.
Class๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ฉด, componentDidMount, componentWillUnmount, componentWillUpdate ๋ฑ์ LifeCycle API๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ์ฒ๋ฆฌ ํํ ๊ฒ ๋์ด ํจ์๋ ๋จ์ผ ์ฑ ์ ์์น์ ๋ฒ์ด๋๊ฒ ๋๊ณ , ์ฝ๋๋ ๋ณต์กํด์ง๋ฉฐ, ํ ์คํธ๋ ์ ์ฐจ ์ด๋ ค์์ก์ต๋๋ค.
=> hook์ ๋ก์ง ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉด์ wrapper hells๋ฅผ ํผํ๊ณ , ๋ฆฌ์กํธ copmonent life cycle์ ์ข ์์ ์ด์ง ์๋๋ก ํด์ค๋๋ค.
๐ Hook์ ํน์ง
1. Hook์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ํ ๊ด๋ จ ๋ก์ง์ ์ถ์ํ
โก๏ธ ๊ณ์ธต ๋ณํ ์์ด ์ํ ๊ด๋ จ ๋ก์ง์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ !
2. Class ์์ด ๋ฆฌ์กํธ ๊ธฐ๋ฅ์ ์ฌ์ฉ ๊ฐ๋ฅ
โก๏ธ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ !
3. ํด๋์ค๋ฅผ ๋์ฒดํ๋ ๊ฒ์ ์๋๋ค.
โก๏ธ Class์ hook ์ค ์ ํ์ ์ฌ์ฉ ๊ฐ๋ฅ !
( ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ์ด๋ฏธ ์ง ๋์ ์ปดํฌ๋ํธ๋ฅผ ๋ชจ์กฐ๋ฆฌ ์ฌ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๊ณ , ์๋ก ๋ง๋๋ ์ปดํฌ๋ํธ๋ฅผ hook์ผ๋ก ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค๊ณ ํฉ๋๋ค.)
๐ Hook ์ฌ์ฉ ๊ท์น
1. ์ต์์์์๋ง Hook์ ํธ์ถํด์ผ ํฉ๋๋ค.
(๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์ ๋ด์์ Hook ์คํ โ)
// ๐๊ท์น์ ์ด๊ธฐ๊ณ ์์.
if (name !== '') {
useEffect(function persistForm() {
localStorage.setItem('formData', name);
});
}
// ๐์กฐ๊ฑด๋ถ๋ก ์คํํ๊ธฐ ์ํ ๋
useEffect(function persistForm() {
if (name !== '') {
localStorage.setItem('formData', name);
}
});
2. React ํจ์ ์ปดํฌ๋ํธ ๋ด์์๋ง Hook์ ํธ์ถํด์ผ ํฉ๋๋ค.
(custom hook์์๋ ํธ์ถ์ด ๊ฐ๋ฅํ์ง๋ง, ์ผ๋ฐ JavaScript ํจ์์์๋ ํธ์ถ โ)
๐ง๐ป๐ป ๋ค์ ํฌ์คํ ์์๋ React๊ฐ ์ ๊ณตํ๋ Hook API์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค! ๐ง๐ป๐ป
์ฐธ๊ณ ๋งํฌ ๐
'ETC > Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] Nodejs์์ Discord Webhook์ผ๋ก ๋ฉ์์ง ๋ฐ์กํ๊ธฐ (0) | 2024.02.11 |
---|---|
[Python] Python ๊ฐ์ํ๊ฒฝ (venv) ์์๋ณด๊ธฐ (0) | 2023.08.29 |
[React] React Hook API (1) (0) | 2020.06.14 |