์ฃผ์ ์์
- ํด๋ผ์ด์ธํธ
- ์คํ์ผ ์์
- useEffect๋ฅผ ํตํ data fetch
- api ํธ์ถ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ฆฌ๋ ๋๋ง์ํค๊ธฐ
- ๋ก๋ฉ์ค์๋ ๋ก๋ฉ์์ ์ ์ ์๋ ๋ฌธ๊ตฌ ๋์ฐ๊ธฐ
- ์๋ฒ
- ๋ฐฐํฌ
- date ๊ฐ์ ์ถ๊ฐํด์ ๋ ์ง์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋๋ก ์ค๊ณ ๋ฐ ๊ตฌํ
- ๋น๋ํ ์ ์ ํ์ผ์ ๋ ๋๋งํ ์ ์๋๋ก ์ค๊ณํ์ฌ ์๋ฒ์์ ํ์ด์ง ๋ ๋๋ง
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- useEffect ์ค๊ณ ๋ฐ ๊ตฌํ(ํ๋กํ ํ์ )
- root์์ useEffect๋ฅผ ๊ด๋ฆฌ
ํ์ต ํค์๋
- ์์ค๋งต
- useEffect
๊ณ ๋ฏผ ๋ฐ ํด๊ฒฐ๊ณผ์
useEffect์ ๋ก์ง ์ค๊ณ ๋ฐ ๊ตฌํ
useEffect์ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จผ์ ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์๊ฐํ๋ ๋ฐฉ๋ฒ์, state์ฒ๋ผ root์ useEffect์ ์ฝ๋ฐฑ์ ๋ฑ๋กํด๋๊ณ , ๋ ๋๋ง ๋ ๋ ์คํํ๋ ๋ฐฉ๋ฒ์ด์๋ค.
๋ฐ๋ผ์ useEffect ๋ํ ํฌ์ธํฐ๋ฅผ ์ฎ๊ฒจ๊ฐ๋ฉด์ ๊ณ์ํด์ ๋ฑ๋กํ ์ ์๋๋ก ํด๋๊ณ , ๋ ๋๋ง์ด ๋๋ ๋ค root์ ๋ฑ๋ก๋์ด์๋ ๋ชจ๋ useEffect์ ๋ํด์ ์คํ์ํฌ ์ ์๋๋ก ํ๋ค. ํ์ง๋ง ๊ทธ๋ฐ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์์๋ค.
async function fetchData() {
const data = await apicall.get("/todo");
setTodoList(data);
}
mhReact.useEffect(async () => {
await fetchData();
}, []);ํด๋น ์ปดํฌ๋ํธ ๋ด๋ถ์ ํจ์์ ๊ฐ์ด, useEffect๋ด์์ fetchDataํ๋ ํจ์๋ฅผ ์คํ์ํค๊ณ , ๋ฐ์ ๋ฐ์ดํฐ์ ๋ํด์ setterํจ์๋ฅผ ํตํด ์๋กญ๊ฒ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํ ์ ์๋๋ก ํด๋์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์, useEffect ๋ด์ ์ฝ๋ฐฑํจ์๊ฐ commit์ด ๋๋ ํ ์คํ์ด ๋๋ฉด, useEffect ์ฝ๋ฐฑ์ด ์คํ๋๋ฉด์ setterํจ์๋ฅผ ํตํด ๋ค์๊ธ ๋ฆฌ๋ ๋๋ง์ ์คํ์์ผฐ๊ณ , ๋ฆฌ๋ ๋๋ง์ด ๋ค์ ๋๊ณ ๋ ํ์๋ ๋ค์๊ธ useEffect๋ด์ ์ฝ๋ฐฑ ํจ์ ์คํ โ ๋ฆฌ๋ ๋๋ง โ useEffect ์ฝ๋ฐฑ ์คํโฆ์ ๋ฌดํ ๋ฃจํ๊ฐ ๋์๋ค.
์ด๋ป๊ฒ ์ด๋ฅผ ๊ตฌ๋ถํด์ ํ๋ฒ๋ง ์คํํ๋ฉด ์ข์๊น? ๋ผ๋ ๊ณ ๋ฏผ์ ํ์๋๋ฐ ํ์ฌ๋ก์ ํ ์ ์๋ ์๊ฐ์ ์คํ ํ๋๊ทธ๋ฅผ ๋๋ ๊ฒ์ด์๋ค.
import { Root } from "../dom/DomRoot";
/**
*
* @param {function} callbackFn
* * @param {[]} dependencies
*/
export function useEffect(callbackFn, dependencies) {
const root = Root();
if (!root.global.hasOwnProperty("effects")) {
root.global.effects = {};
root.global.effectsIdx = 0;
}
const effectInformation = {
fn: null,
prev: null,
dependencies: null,
called: false,
};
effectInformation.fn = callbackFn;
effectInformation.prev = dependencies;
effectInformation.dependencies = dependencies;
const index = root.global.effectsIdx;
root.global.effects[index] = effectInformation;
root.global.effectsIdx++;
}called๋ผ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋๊ณ ๊ฐ์ฒด ์์ฒด๋ฅผ effect๋ก ๊ด๋ฆฌํ๋ค. ํ๋ฒ ๋ ๋๋ง์ด ๋๋ฉด called๊ฐ true๋ก ๋ฐ๋๊ณ , true๋ ํจ์์ ๋ํด์๋ ์คํ์ํค์ง ์๊ณ flag์ ๊ฐ๋ง false๋ก ๋ค์ ๋ฐ๊พธ๋ ๋ฐฉ์์ ํตํด ์ต์ด ํ๋ฒ๋ง ์คํ๋ ์ ์๋๋ก ํ์๋ค.
์ด ์ธ์ prev๋ dependencies๊ฐ์ ๊ฒฝ์ฐ๋ Dependencies์ ์๋ ๊ฐ์ด prev๊ฐ๊ณผ ๋ณํ๋ฉด ๋ฆฌ๋ ๋๋ง์ด ์ด๋ฃจ์ด์ง ์ ์๋๋ก ํ๋๋ฐ, ์์ง๊น์ง ์ด๋ ๋ณด์๋์ง๋ ์์๊ณ ๊ณ์ํด์ ๋ณด์ํ ์์ ์ด๋ค.