
React๋ฅผ ์ฐ๋ค ๋ณด๋ฉด useEffect๋ ์ง์ง ๋๋ฌด ์์ฃผ ๋ง์ฃผ์น๋๋ฐ,
๊ทธ๋งํผ ์ฐ์์๋ ๋ง๊ณ , ๋ ์๋ชป ์ฐ๋ฉด ์์์น ๋ชปํ ๋ฆฌ๋ ๋๋ง์ด ์๊ธฐ๊ฑฐ๋ ๋ฌดํ ๋ฃจํ์ ๋น ์ง๊ธฐ๋ ํ๋๋ผ.
๊ทธ๋์ ์ด๋ฒ์ ์ ๋๋ก ํ๋ฒ ์ ๋ฆฌํด๋ดค๋ค.
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ์ดํ์ ์คํ๋๋ ํ .
ํํ ๋งํ๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด API ํธ์ถ, ํ์ด๋จธ ์ค์ , ์ด๋ฒคํธ ๋ฑ๋ก ๊ฐ์ ์์ ๋ค์ด ๋ํ์ ์ด๋ค.
import { useEffect } from 'react';
useEffect(() => {
console.log('์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ์คํ๋๋ค!');
return () => {
console.log('์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ์ ๋ฆฌ๋๋ค!');
};
}, []);
useEffect์ ๋ ๋ฒ์งธ ์ธ์ []๊ฐ ์ง์ง ํต์ฌ์ด๋ค.
์์กด์ฑ ๋ฐฐ์ด์ ๋ฐ๋ผ์ ์คํ ํ์ด๋ฐ์ด ์์ ํ ๋ฌ๋ผ์ง๋ค.
| ์์กด์ฑ ๋ฐฐ์ด | ์คํ ์์ |
|---|---|
| ์์ | ๋งค๋ฒ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ์คํ๋จ |
[] | ์ฒ์ ๋ง์ดํธ๋ ๋ ํ ๋ฒ๋ง ์คํ |
[๊ฐ1, ๊ฐ2] | ํด๋น ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์คํ๋จ |
useEffect(() => {
console.log('count๊ฐ ๋ฐ๋ ๋๋ง๋ค ์คํ๋จ');
}, [count]);
ํนํ ํ์ด๋จธ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ธ ๋๋ ๊ผญ ์ ๋ฆฌ(clean-up)๋ฅผ ํด์ค์ผ ํ๋ค.
์ ๊ทธ๋ฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์ด์ํ ๋ฒ๊ทธ ์๊น...
useEffect(() => {
const interval = setInterval(() => {
console.log('3์ด๋ง๋ค ์คํ!');
}, 3000);
return () => {
clearInterval(interval); // ๊ผญ ์ ๋ฆฌํด์ฃผ์!
};
}, []);
์ฒ์์ useEffect๋ ๊ทธ๋ฅ ์จ์ผ ํ๋ ๊ฒ ๊ฐ์ ๋๋์ด์๋๋ฐ,
์ด์ ๋ ์ด ํ
์ด ์ ํ์ํ์ง, ๊ทธ๋ฆฌ๊ณ ์ธ์ ์ด๋ป๊ฒ ์คํ๋๋์ง ์กฐ๊ธ ๊ฐ์ด ์จ๋ค.
ํนํ ์์กด์ฑ ๋ฐฐ์ด์ ์๋ชป ๋ฃ์ผ๋ฉด ๋ฌดํ ๋ ๋๋ง ๋์ค๋ ๊ฒ๋ ์ด์ ๋ ์กฐ์ฌํ ์ ์์ ๋ฏ!
"ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๊ฒ ์ ๋ถ๊ฐ ์๋๋ค. ๊ทธ ๋ค์์ ๋ฒ์ด์ง๋ ์ผ๋ค์ ๋ค๋ฃฐ ๋ useEffect."