useEffect()
๐ ์ ์
React์์ ์ ๊ณตํ๋ ํ
์ค ํ๋๋ก, ํจ์ ์ปดํฌ๋ํธ์์ side effects๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. side effects๋ ์ปดํฌ๋ํธ์ ๋ ๋๋ง๊ณผ๋ ์ง์ ์ ์ผ๋ก ๊ด๋ จ์ด ์๋ ์์
๋ค์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ๊ตฌ๋
์ค์ , ์๋์ผ๋ก DOM ์กฐ์ ๋ฑ์ด ์๋ค.
โ๏ธํน์ง
- useEffect๋ component๊ฐ mount,unmount,update ๋์ ๋ ํน์ ์์
์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ฆ, ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ด ์๋ฃ๋ ํ์ ์คํ๋๋ ํจ์๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ด ํจ์๋ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ด ํ๋ฉด์ ํ์๋ ์ดํ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
- useEffect์ ์ ๋ฌ๋ ํจ์๋ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๊ธฐ ์ ์ด๋ ์
๋ฐ์ดํธ๋๊ธฐ ์ง์ ์ ์ ๋ฆฌ(clean-up) ํจ์๋ฅผ ๋ฐํํ ์ ์๋ค.
โ ์์ ์ฝ๋
๊ธฐ๋ณธ ๊ตฌ์กฐ
useEffect(() => {
return () => {
};
}, []);![](https://velog.velcdn.com/images/kwonyongyong/post/174d9451-2725-49bb-bb18-381fa657f371/image.jpeg)
mount ์์ ์ฝ๋
import React, { useEffect } from 'react';
function MountExample() {
useEffect(() => {
console.log('์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋จ');
return () => {
console.log('์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋จ');
};
}, []);
return (
<div>
{}
</div>
);
}
export default MountExample;
update ์์ ์ฝ๋
import React, { useEffect, useState } from 'react';
function UpdateExample() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log('์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋จ');
}, [count]);
return (
<div>
<p>์นด์ดํธ: {count}</p>
<button onClick={() => setCount(count + 1)}>
์นด์ดํธ ์ฆ๊ฐ
</button>
</div>
);
}
export default UpdateExample;
unmount ์์ ์ฝ๋
import React, { useEffect } from 'react';
function UnmountExample() {
useEffect(() => {
console.log('์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋จ');
return () => {
console.log('์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋จ');
};
}, []);
return (
<div>
{}
</div>
);
}
export default UnmountExample;