
ํด๋์คํ ์ปดํฌ๋ํธ๋ฅผ ์ธ ๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๊ฐ ๋ช ํํ๋ค.
componentDidMount componentDidUpdate componentWillUnmount๊ทธ๋ฐ๋ฐ ํจ์ํ ์ปดํฌ๋ํธ์์๋ useEffect, useLayoutEffect, useRef ๋ฑ์ด
๊ทธ ์ญํ ์ ๋๋ ์ ํ๊ณ ์์ด์ ์กฐ๊ธ ํท๊ฐ๋ฆด ์ ์๋ค.
์ด๋ฒ ๊ธ์ React ํจ์ํ ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ ํ๋ฆ์
ํด๋์คํ ๋ฉ์๋ ๊ธฐ์ค์ผ๋ก ๋งตํํด์ ์ ๋ฆฌํ ๊ธ์ด๋ค.
(์ปดํฌ๋ํธ ์ต์ด ๋ ๋๋ง)
โ useEffect (Mount ์ ์คํ)
โ ์ํ ๋ณ๊ฒฝ โ Re-render
โ useEffect (Update ์ ์คํ)
โ ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ ์ โ Clean-up ํจ์ ์คํ
useEffect(() => {
console.log('์ฒ์ ๋ ๋๋ง ์ ์คํ๋จ');
}, []);
๐ ์ด๊ฑด ํด๋์คํ์ componentDidMount์ ๊ฐ๋ค.
useEffect(() => {
console.log('์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์คํ๋จ');
}, [someState]);
๐ ํด๋์คํ์ componentDidUpdate์ ํด๋นํ๋ค.
useEffect(() => {
return () => {
console.log('์ธ๋ง์ดํธ ์ ์คํ๋จ');
};
}, []);
๐ ํด๋์คํ์ componentWillUnmount์ ๊ฐ๋ค.
const isMounted = useRef(false);
useEffect(() => {
if (isMounted.current) {
console.log('์
๋ฐ์ดํธ์
๋๋ค!');
} else {
isMounted.current = true;
}
}, [someValue]);
โ
์ด ํจํด์ ์ต์ด ๋ ๋๋ง์ ์ ์ธํ๊ณ ,
๊ทธ ์ดํ์ ์
๋ฐ์ดํธ์์๋ง ์คํ๋๋๋ก ์ ์ดํ ์ ์๋ค.
| ํด๋์คํ ๋ฉ์๋ | ํจ์ํ ๋์ฒด ๋ฐฉ์ |
|---|---|
componentDidMount | useEffect(() => {}, []) |
componentDidUpdate | useEffect(() => {}, [dep]) |
componentWillUnmount | useEffect์ return ํจ์ |
shouldComponentUpdate | React.memo, useMemo ๋ฑ |
useEffect๋ ๋๋ ์ ์ฐ๋ ๊ฒ ๊ฐ๋
์ฑ์ ์ข๋คuseLayoutEffect๋ ๋ง์ดํธ ํ์ด๋ฐ์ด ๋ค๋ฅด๋ฏ๋ก ํ์ํ ๊ฒฝ์ฐ๋ง ์ฌ์ฉconsole.log๋ก ํ์ด๋ฐ์ ์ฒดํฌํ๋ ๊ฒ ์ ์ฉ์ฒ์์๋ useEffect ํ๋๋ก ๋ชจ๋ ๊ฑธ ์ฒ๋ฆฌํ๋๊น ์ง๊ด์ ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ์ปดํฌ๋ํธ๊ฐ ์ปค์ง๋๊น "์ด๊ฑด ๋ง์ดํธ์ฉ์ธ๊ฐ? ์
๋ฐ์ดํธ์ฉ์ธ๊ฐ?"
ํท๊ฐ๋ฆฌ๋ ์ผ์ด ๋ง์์ก๊ณ , ๊ทธ๋๋ถํฐ ์์์ ์ผ๋ก ์๋ช
์ฃผ๊ธฐ์ฒ๋ผ ๊ตฌ์กฐ๋ฅผ ๋๋๊ฒ ๋๋ค.
์ด์ ๋ useEffect, useRef, React.memo, useCallback ๋ฑ์
"์๋ช
์ฃผ๊ธฐ๋ฅผ ์ชผ๊ฐ์ ์ ์ดํ๋ ๋๊ตฌ"์ฒ๋ผ ์ฐ๊ณ ์๋ค.
๐งฌ "์๋ช ์ฃผ๊ธฐ๋ฅผ ์ดํดํ๋ฉด, React์ ๋ชจ๋ ํ๋ฆ์ด ๋์ ๋ค์ด์จ๋ค."