๋ฆฌ์กํธ๋ฅผ ์ฐ๋ค ๋ณด๋ฉด ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ํจ์๋ ๊ณ์ฐ์ด ๋ค์ ์คํ๋๋ ํ์ ๋๋ฌธ์ ์ฑ๋ฅ ์ด์๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
ํนํ .filter() ๋ .map(), .sort()์ฒ๋ผ ๋ฐ๋ณต ๊ณ์ฐ์ด ๋ง์ ์ฐ์ฐ์ ๋ถํ์ํ๊ฒ ๋ฐ๋ณต๋๋ฉด ๋ฆฌ์กํธ์ ํผํฌ๋จผ์ค๋ฅผ ๊ฐ์๋จน์ต๋๋ค.
๊ทธ๋์ ๋ฑ์ฅํ๋ ๊ฒ ๋ฐ๋ก โญuseMemo ์ ๋๋ค.
์ค๋ฌด์์ ์์ฃผ ์ฐ์ด๋ useMemo์ ๊ฐ๋ ๊ณผ ์์ ์ ๋ํด ์ด๋ป๊ฒ ์ฐ์ด๋์ง ์ ๋ฆฌํ์์ต๋๋ค.
useMemo๋?
const memoizedValue = useMemo(() => {
return ๊ณ์ฐ์;
}, [์์กด์ฑ])
๐ก ํ๋ง๋๋ก ๋งํ๋ฉด?
"์์กด์ฑ ๊ฐ์ด ๋ฐ๋๋๋ง ๋ค์ ๊ณ์ฐ๋๋ ๊ฐ" ์ ๋ง๋ค์ด์, ๋ถํ์ํ ๊ณ์ฐ์ ๋ง์์ฃผ๋ ํ
๐ ์์จ์ผํ ๊น?
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ๋ด๋ถ ์ฝ๋๋ฅผ ๋ค์ ์คํํ๋๋ฐ, ์ฐ์ฐ(filter, map, sort ๋ฑ..)์ ๋งค๋ฒ ์คํํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ์ค๋๋ค.
๊ทธ๋์ ๊ฐ์ ๊ธฐ์ตํด๋๊ณ , ์์กด์ฑ์ด ๋ฐ๋ ๋๋ง ๋ค์ ๊ณ์ฐํ๋๋ก ํด์ฃผ๋๊ฒ useMemo์ ๋๋ค.
์์ ์ฝ๋
const categoryList = [
{id: 1, name:"์
ํ๊ฐํต", type: "normal"},
{id: 2, name:"๋๋ฆฌ์ ๊ฐํต", type: "agent"},
]
const filteredCategories = useMemo(() => {
// ํต์ ์ฌ๊ฐ KT์ธ ๊ฒฝ์ฐ์๋ง "normal" ํ์
์นดํ
๊ณ ๋ฆฌ๋ง ํํฐ๋ง
return selectedCarrier == "KT"
? categoryList.filter((category) => category.type === "normal")
: categoryList;
}, [selectedCarrier, categoryList]);
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์ ํํ ํต์ ์ฌ(`selectedCarrier`)๊ฐ "KT"์ผ ๊ฒฝ์ฐ์๋ง ํน์ ์นดํ ๊ณ ๋ฆฌ (`type == "normal"`)๋ง ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ด๋, .filter()๋ฅผ ๋งค๋ฒ ์คํํ๋ฉด ๋นํจ์จ์ ์ผ ์ ์์ผ๋, ์์ ์ฝ๋ ์ฒ๋ผ useMemo๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋๋ง ์ต์ ํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋์ useMemo๋ฅผ ์ฌ์ฉํ๋ฉด:
- ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ด๊ณ ์์กด์ฑ(selectedCarrier, categoryList)์ด ๋ฐ๋ ๋๋ง ๊ณ์ฐ
- ๊ทธ ์ธ์๋ ์บ์๋ ๊ฒฐ๊ณผ ์ฌ์ฉ
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ํน์ ์๊ฐ๋์๋ง ๋ฒํผ ํ์ฑํ (feat. ๊ณตํด์ผ, ์ฃผ๋ง ์ ์ธ) (0) | 2025.04.11 |
---|---|
[React] Vite + Yarn Berry ํ๋ก์ ํธ ์ค์ (0) | 2025.02.23 |
[react] ERROR in ./src/reportWebVitals.js ํจํค์ง ๋๋ฝ (4) | 2024.12.22 |
[React] SPA ์ฑ๊ธํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด๋? ๋ฌด์์ผ๊น. (2) | 2024.09.24 |