์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์ ๋(์ฒ์ ๋ํ๋ฌ์ ๋), ์ธ๋ง์ดํธ ๋์ ๋(์ฌ๋ผ์ง ๋), ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ดํธ ๋ ๋(ํน์ props๊ฐ ๋ฐ๋ ๋) ํน์ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ธฐ
// UserList.js
import React, { useEffect } from "react";
function User({ user, onRemove, onToggle }) {
useEffect(() => {
// ๋ง์ดํธ : ์ฒ์ ๋ํ๋ฌ์ ๋
console.log("์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ํ๋จ");
return () => {
// ์ธ๋ง์ดํธ : ์ฌ๋ผ์ง ๋
console.log("์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง");
};
}, []);
...
}
deps
๋ฐฐ์ด์ด ๋น์ด์๋ค๋ฉด, ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ํ๋ ๋์๋ง useEffect
์ ๋ฑ๋กํ ํจ์๊ฐ ํธ์ถcleanup
ํจ์useEffect
์์์ return
ํ ๋ ์คํuseEffect
์ ๋ํ ๋ท์ ๋ฆฌ๋ฅผ ํด์ค๋ค.deps
๊ฐ ๋น์ด์๋ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋ cleanup
ํจ์ ํธ์ถ
deps
๋ฐฐ์ด์ด ๋น์ด์๋ ์ํ
- ์ปดํฌ๋ํธ 3๊ฐ๊ฐ ๋ํ๋ ์์ผ๋ฏ๋ก "์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ํ๋จ"์ด ์ฝ์์ 3๋ฒ ์ฐํ๋ค.
- ์ปดํฌ๋ํธ๊ฐ ๋ํ๋ ๋ "์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ํ๋จ"์ด ์ฝ์์ ์ฐํ๋ค.
- ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋
cleanup
ํจ์ ํธ์ถ๋์ด "์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง"์ด ์ฝ์์ ์ฐํ๋ค.
props
๋ก ๋ฐ์ ๊ฐ์ ์ปดํฌ๋ํธ์ ๋ก์ปฌ ์ํ๋ก ์ค์ setInterval
์ ํตํ ๋ฐ๋ณต์์
๋๋ setTimeout
์ ํตํ ์์
์์ฝsetInterval
, setTimeout
์ ์ฌ์ฉํ์ฌ ๋ฑ๋กํ ์์
์ clear (clearInterval
, clearTimeout
)deps
์ ํน์ ๊ฐ ๋ฃ๊ธฐdeps
์ ํน์ ๊ฐ์ ๋ฃ์ผ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ ๋ ๋, ํน์ ๊ฐ์ด ๋ฐ๋ ๋ ํธ์ถ๋๋ค.// UserList.js
import React, { useEffect } from "react";
function User({ user, onRemove, onToggle }) {
useEffect(() => {
console.log('user ๊ฐ์ด ์ค์ ๋จ');
console.log(user);
return () => {
console.log('user๊ฐ ๋ฐ๋๊ธฐ ์ ..');
console.log(user);
};
}, [user]);
...
}
useEffect
์์์ ์ฌ์ฉํ๋ ์ํ๋ props
๊ฐ ์๋ค๋ฉด, useEffect
์ deps
์ ๋ฃ์ด์ค์ผ ํ๋ค.useEffect
๊ท์นprops
๋ฅผ deps
์ ๋ฃ์ง ์๋๋ค๋ฉด, useEffect
์ ๋ฑ๋กํ ํจ์๊ฐ ์คํ๋ ๋ ์ต์ ์ํ/props
๋ฅผ ๊ฐ๋ฅดํค์ง ์๋๋ค.deps
ํ๋ผ๋ฏธํฐ ์๋ตํ๊ธฐdeps
๋ฅผ ์๋ตํ๋ค๋ฉด, ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ํธ์ถ// UserList.js
import React, { useEffect } from "react";
function User({ user, onRemove, onToggle }) {
useEffect(() => {
console.log(user);
});
...
}