useEffect ํจ์
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋ ๋ง๋ค ํน์ ์์ ์ ์คํํ ์ ์๋๋ก ํ๋ Hook
component๊ฐ mount ๋์์ ๋[์ฒ์ ๋ํ๋ฌ์ ๋], component๊ฐ unmount๋์์ ๋[์ฌ๋ผ์ง ๋], component๊ฐ update๋์์ ๋[ํน์ props๊ฐ ๋ฐ๋ ๋]
๊ธฐ๋ณธ ํํ
useEffect(function, deps)
- function: ์ํํ๊ณ ์ ํ๋ ์์ [ํจ์]
- deps: ๋ฐฐ์ด ํํ, ๋ฐฐ์ด ์์๋ ๊ฒ์ฌํ๊ณ ์ ํ๋ ํน์ ๊ฐ ํน์ ๋น ๋ฐฐ์ด[์์กด๋๋ ๊ฐ๋ค]
- cleanup ํจ์: ํจ์ ๋ฐํ, deps๊ฐ ๋น์ด ์๋ ๊ฒฝ์ฐ์ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋ ํธ์ถ๋จ
- ์์กด๋๋ ๊ฐ์ ๋ฐฐ์ด์ด ๋น์ด ์์ผ๋ฉด, ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ์์ฑ๋ ๋์๋ง ์์ ์ด ์คํ๋๊ณ , ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง ๋๋ returnํด์ ์ฝ๋๋ฅผ ์์ฑ
useEffect(()=>{
//mount
console.log('์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ํ๋จ');
return()=>{
//unmount
console.log('์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง');
}
}, [])
mount/unmount
mount ์์ ํ๋ ์์
- props๋ก ๋ฐ์ ๊ฐ์ ์ปดํฌ๋ํธ์ ๋ก์ปฌ ์ํ๋ก ์ค์ → ๋ฐ์์จ props๋ฅผ ๊ฐ์ฒด์ state๋ก ์ค์
- ์ธ๋ถ API ์์ฒญ(REST API ๋ฑ)
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ(D3, Video.js ๋ฑ)
- setInterval์ ํตํ ๋ฐ๋ณต ์์ ํน์ setTimeout์ ํตํ ์์ ์์ฝ
unmount ์์ ํ๋ ์์
- ๋ท ์ ๋ฆฌ ํจ์
- setInterval, setTimeout์ ์ฌ์ฉํ์ฌ ๋ฑ๋กํ ์์ ๋ค clearํ๊ธฐ(clearInterval, clearTimeout)
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ์คํด์ค ์ ๊ฑฐ
deps์ ํน์ ๊ฐ ๋ฃ๊ธฐ
→ ์์กด์ฑ์ ๊ฐ์ ์ถ๊ฐํ๋ฉด, ๊ทธ ๊ฐ์ ํน์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํด๋น ๊ฐ์ ๊ฐ์ฒด ์ถ๋ ฅ
- deps์ ํน์ ๊ฐ์ ๋ฃ๊ฒ ๋๋ค๋ฉด, ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ ๋ ๋์๋ ํธ์ถ์ด ๋๊ณ , ์ง์ ํ ๊ฐ์ด ๋ฐ๋ ๋๋ ํธ์ถ ๋จ
- deps์์ ํน์ ๊ฐ์ด ์์ผ๋ฉด ์ธ๋ง์ดํธ์์๋ ํธ์ถ์ด ๋๊ณ , ๊ฐ์ด ๋ฐ๋๊ธฐ ์ง์ ์๋ ํธ์ถ์ด ๋จ
- useEffect ์์์ ์ฌ์ฉํ๋ ์ํ๋, props๊ฐ ์๋ค๋ฉด, useEffect์ deps์ ๋ฃ์ด์ฃผ์ด์ผ ํจ
- ๋ง์ฝ, ๋ฃ์ง ์๋๋ค๋ฉด useEffect์ ๋ฑ๋กํ ํจ์๊ฐ ์คํ ๋ ๋ ์ต์ props ํน์ ์ํ๋ฅผ ๊ฐ๋ฆฌํค์ง ์์ → ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ํธ์ถ
useMemo
๋ฆฌ๋ ๋๋ง ์ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ state์ ํด๋น๋์ง ์๋ ํจ์๋ค๋ ๊ฐ์ด ์คํ๋๋ฏ๋ก ๋นํจ์จ์ ์
→ ์ฑ๋ฅ ์ต์ ํ(๋ฆฌ๋ ๋๋ง ์ต์ํ)๋ฅผ ์ํ์ฌ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- Memo๋ “memoized”๋ฅผ ์๋ฏธ(์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ์ฌ์ฌ์ฉ)
memoization(๋ฉ๋ชจ์ด์ ์ด์ )์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณต ์ํ์ ์ ๊ฑฐํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์
๊ธฐ๋ณธ ๊ตฌ์กฐ
import React, { useRef, useState, useMemo } from "react";
function countActiveUsers(users) {
console.log("ํ์ฑ ์ฌ์ฉ์ ์๋ฅผ ์ธ๋ ์ค...");
return users.filter((user) => user.active).length;
}
const count = useMemo(() => countActiveUsers(users), [users]);
์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ: ์ด๋ป๊ฒ ์ฐ์ฐํ ์ง ์ ์ํ๋ ํจ์
๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ: deps๋ฐฐ์ด (๋ฐฐ์ด ์์ ๋ฃ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ฑ๋กํ ํจ์ ํธ์ถํ์ฌ ๊ฐ์ ์ฐ์ฐ, ๋ด์ฉ์ด ๋ฐ๋์ง ์์ผ๋ฉด ์ด์ ์ ์ฐ์ฐํ ๊ฐ ์ฌ์ฌ์ฉ)
'ํ๋ก ํธ์๋ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| useReducer (0) | 2022.11.24 |
|---|---|
| useCallback, React.memo (0) | 2022.11.24 |
| ์ปดํฌ๋ํธ ๋ ๋๋ง (0) | 2022.11.23 |
| โ ๋ฐฐ์ด ๋ด์ฅ ํจ์(์๋ฐ์คํฌ๋ฆฝํธ) (0) | 2022.11.17 |
| ๋ฆฌ์กํธ์ ๋ฐฐ์ด (0) | 2022.11.17 |