react์์ Lifecycle์ด๋ผ๊ณ ํ๋ฉด mount, update, unmount๋ก ๋๋ ์ ์๋ค.
mount - ํ๋ฉด์ ๋ํ๋จ
update - ์ ๋ฐ์ดํธ, ๋ฆฌ๋๋
unmount - ํ๋ฉด์์ ์ฌ๋ผ์ง
useEffectํจ์๋ react hook์ผ๋ก
ํด๋์คํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์์๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๊ฒํ๋ค.
useEffect(function, deps) ํํ๋ก
1. mount ์์ ์ ์คํ
useEffect(() => {
console.log("mount!");
},[]);
- deps๊ฐ ๋น ๋ฐฐ์ด ์ผ ๊ฒฝ์ฐ mount ์์ ์ ์ฝ๋ฐฑํจ์ ์คํ
2. update ๋๋ ์๊ฐ ์คํ
useEffect(() => {
console.log("update!");
});
useEffect(() => {
console.log("name update!");
},[name]);
- deps๊ฐ ์์ ๊ฒฝ์ฐ, deps์ ํน์ props, states
- ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๋ ์๊ฐ (state ๋ณ๊ฒฝ, ๋ด๋ ค๋ฐ๋ props๊ฐ ๋ณ๊ฒฝ, ๋ถ๋ชจ๊ฐ ๋ฆฌ๋๋๋ง)
3. unmount ์์ ์ ์คํ
import React, { useEffect, useState } from "react";
const UnmountTest = () => {
useEffect(() => {
console.log("mount!"); // mount ์์ ์ ์คํ
return () => {
// Unmount ์์ ์ ์คํ
console.log("Unmount");
};
}, []);
return <div>UnmountTest</div>;
};
const Lifecycle = () => {
const [isVisible, setIsVisible] = useState(false);
const toggle = () => setIsVisible(!isVisible);
return (
<div style={{ padding: 20 }}>
<button onClick={toggle}>ON/OFF</button>
{isVisible && <UnmountTest />} // true์ผ๊ฒฝ์ฐ UnmountTest ์ปดํฌ๋ํธ๊ฐ ๋ํ๋จ
</div>
);
};
export default Lifecycle;
์ฌ์ฉ ์์
const getData = async () => {
const res = await fetch(
"https://jsonplaceholder.typicode.com/comments"
).then((res) => res.json());
console.log(res);
};
useEffect(() => {
getData();
}, []);
- api๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ mount ์์ ์ ์ํ