UseEffect ๋. ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํน์ ์์ ์ ์ํํ๋๋ก ์ค์ ํ ์ ์๋ Hook์.
โ
๊ธฐ์กด์๋ ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์๋๋ฐ.
useEffect๋ฅผ ์ฐ๋ฉด ํจ์ ์ปดํฌ๋ํธ์์๋ side effect ๋ฅผ ์ธ ์ ์๊ฒ ๋์๋ค.
๋ผ์ดํ์ฌ์ดํด hook(componentDidMount, componentDidUpdate, componentWillUnMount)์ ๋์ฒดํ ์ ์๋ useEffect.
์ฌ์ฉ ๋ฐฉ๋ฒ
import { useEffect } from 'react';
function useeffecttest() {
// ์ฌ์ฉ๋ฒ 1. ์ข
์์ฑ ๋งค๊ฐ๋ณ์ ์์.
useEffect(() => {
DoSomething();
});
// ์ฌ์ฉ๋ฒ 2. ๋น ์ข
์์ฑ ๋งค๊ฐ๋ณ์
useEffect(() => {
DoSomething();
}, []);
// ์ฌ์ฉ๋ฒ 3. ์ผ๋ถ ์ข
์์ฑ ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด
useEffect(() => {
DoSomething();
}, [counter1, counter2]);
}
- ์ ์ธ. ์ฒซ๋ฒ์งธ ์ธ์๋ ํจ์, ๋๋ฒ์งธ ์ธ์๋ ๋ฐฐ์ด์ด ๋ค์ด๊ฐ.
- function ์์ ์๋ ์ฌ์ฉ๋ฒ ํํ ์ค์ ํ๋๋ฅผ ๊ณจ๋ผ ์ํ๋ ๊ณณ์์ ์ฌ์ฉ!
๊ฐ ์ฌ์ฉ๋ฒ์ ๋ํ ์ค๋ช
์ฌ์ฉ๋ฒ 1. ์ข ์์ฑ ๋งค๊ฐ๋ณ์๊ฐ ์๋ useEffect()
useEffect ( () => {
DoSomething ();
});
๋ ๋๋ง ์ดํ์ ์คํํ ํจ์. ํ๋ฉด ๋ ๋๋ง์ด ๋ ๋๋ง๋ค ์คํ์ด ๋จ.
์ค๋ช ํ์๋ฉด componentDidMount ์ componentDidUpdate ๋ฅผ ํจ๊ป ํํํ ๊ฐ๋ .
์ฌ์ฉ๋ฒ 2. ๋น ์ข ์์ฑ ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ด ์๋ useEffect()
useEffect ( () => {
DoSomething ();
}, []) ;
๋น ๋ฐฐ์ด์ ์ ์ธํ ์, ์ด๊ธฐ ๋ ๋๋ง ์ ํ๋ฒ๋ง ์คํ๋๋ค.
C# ์ผ๋ก ๋น๊ต๋ฅผ ํ์๋ฉด FormLoad() ์ด๋ฒคํธ์ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์ฌ์ฉ๋ฒ 3. ์ผ๋ถ ์ข ์์ฑ ๋งค๊ฐ๋ณ์ ๋ฐฐ์ด์ด ์๋ useEffect()
useEffect ( () => {
DoSomething (counter1, counter2);
}, [counter1, counter2]);
์ฃผ์์ . ๋งค๊ฐ๋ณ์ ์ ๊ฒฝ์ฐ useState() ํน์ Redux ๊ฐ์ DOM ์ ๋ณ๊ฒฝ ์ํฌ ์ ์๋ ๋ณ์ ํํ์ฌ์ผ ํ๋ค.
โ
๋ฐฐ์ด ์์ ์๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋ณํ๊ฐ ์ผ์ด๋ ๋๋ง๋ค useEffect ์์ ๋ด์ฉ์ด ์คํ๋๋ค.
C# ๊ณผ ๋น๊ตํ๋ฉด propertychanged() ์ด๋ฒคํธ ํน์ propertychanging() ์ด๋ฒคํธ ์ ์ ์ฌํ๋ค.
์์
useEffect(() => {
const fetchData = async () => {
try {
const response = await AxiosCustomInstance({}).get(props.url);
dataList = response.data; // dataList
if (dataList && dataList.length > 0) {
let newOptions = dataList.map((item) => ({
value: item[valueName],
label: item[labelName],
name: props.name,
ALL: item[valueName],
}));
let newArray = [newFirstElement].concat(newOptions);
setOptions(newArray);
// multiSelect ์ผ ๊ฒฝ์ฐ defalut value ํ์์์
if (props.isMultiSelect !== undefined) {
// value ํ๋กํผํฐ๋ฅผ ALL ํ๋กํผํฐ์ ํ ๋น
newOptions.value = newOptions.ALL;
// ๊ธฐ์กด value ํ๋กํผํฐ ์ ๊ฑฐ
delete newOptions.value;
setArrayList(newOptions);
}
} else {
// dataList๊ฐ ์์ ๊ฒฝ์ฐ Select/ALL๋ง ๋ฐ์ธ๋ฉ
setOptions([newFirstElement]);
}
} catch (error) {
console.error("Error fetching " + props.name + ":", error);
}
};
fetchData();
}, []);
์ด๋ฐ ์์ผ๋ก ํ๋ฉด ์ด๊ธฐ ๊ฐ์ api ๋ก ๋ถ๋ฌ์ ํ๋ฉด ์ ํ ์ ํด์ฃผ๋ ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
โ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ๊ฑฐ๋ ๊ฐ๋ฐํ๋ฉฐ ๋๊ผ๋ ๋ํผ์
๋ก ์์ฑํ๊ณ ์์ผ๋,
๊ถ๊ธํ์ ์ ์ด๋ ์๋ชป๋ ์ ์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.