useMemo()
์ useCallback()
์ ๋ฆฌํ๊ธฐ
ํน์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋
useMemo()
,
ํน์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ๋useCallback()
โ๏ธ ํน์ ํจ์ ์ฌ์ฌ์ฉ useCallback()
- ํ๋ฒ ๋ง๋ ํจ์๋ฅผ ํ์ํ ๋๋ง ์๋ก ๋ง๋ค๊ณ ์ฌ์ฌ์ฉํ๋ ๊ฒ
-
์ปดํฌ๋ํธ์์
props
๊ฐ ๋ฐ๋์ง ์์ผ๋ฉดVirtual DOM
์ ์๋ก ๋ ๋๋งํ๋ ๊ฒ ์กฐ์ฐจ ํ์ง ์๊ณ ์ปดํฌ๋ํธ์ ๊ฒฐ๊ณผ๋ฌผ์ ์ฌ์ฌ์ฉ ํ๋ ์ต์ ํ ์์ ์ ํ ๊ฑด๋ฐ, ์ด๋ด ๊ฒฝ์ฐ ํจ์๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ํ์ - ์ฃผ์ํ ์ ์, ํจ์ ์์์ ์ฌ์ฉํ๋
state
ํน์props
๊ฐ ์๋ค๋ฉด ๊ผญ,deps
๋ฐฐ์ด์์ ํฌํจ์์ผ์ผ ๋๋ค๋ ๊ฒ- ๊ทธ๋ ์ง ์๋ค๋ฉด, ํจ์ ๋ด์์ ํด๋น ๊ฐ๋ค์ ์ฐธ์กฐํ ๋ ๊ฐ์ฅ ์ต์ ์ ๊ฐ์ ์ฐธ์กฐํ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ ์ ์๋ค;;
props
๋ก ๋ฐ์์จ ํจ์๊ฐ ์๋ค๋ฉด, ์ด ํจ์๋ deps` ๋ฐฐ์ด์ ์ถ๊ฐํด์ผ ํจ!
:: ์ฝ๋ ์์
- a์ b์ ๊ฐ์ด ๋ณํ ๋์๋ง
doSomething
ํจ์๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ
// ์ ์ฉํ
const memoizedCallback = useCallback(() => {
doSomething(a, b);
}, [a, b]);
โ๏ธ ํน์ ๊ฒฐ๊ณผ๊ฐ ์ฌ์ฌ์ฉ useMemo()
- ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ์ฌ ์ฐ์ฐ๋ ๊ฐ์ useMemo๋ผ๋ Hook์ ์ฌ์ฉํ์ฌ ์ฌ์ฌ์ฉํ ๋ ์ฌ์ฉ
- useMemo๋ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋์์ ๋์๋ง ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ๋ง ๋ค์ ๊ณ์ฐํ๋ค
- useMemo๋ก ์ ๋ฌ๋ ํจ์๋ ๋ ๋๋ง ์ค์ ์คํ!!!!
- ์์กด์ฑ ๋ฐฐ์ด์ด ์์ ๊ฒฝ์ฐ ๋ ๋๋ง ํ ๋ ๋ง๋ค ์๋ก์ด ๊ฐ์ ๊ณ์ฐํ๋ ์ฃผ์!
๋ฉ๋ชจ์ด์ ์ด์ (memorization): ์ด์ ์ ๊ณ์ฐ ํ ๊ฐ์ ์ฌ์ฌ์ฉํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค
:: ์ฝ๋ ์์
- a์ b์ ๊ฐ์ด ๋ณํ ๋๋ง
computeExpensiveValue
ํจ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผmemoizedValue
๋ด๊ธฐ!
// ์ ์ฉํ
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
โ๏ธ React.memo๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง ๋ฐฉ์ง
- ์ปดํฌ๋ํธ์ props ๊ฐ ๋ฐ๋์ง ์์๋ค๋ฉด,
- ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ์ฌ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํด์ค ์ ์๋
React.memo
ํจ์ - ์ปดํฌ๋ํธ์์ ๋ฆฌ๋ ๋๋ง์ด ํ์ํ ์ํฉ์์๋ง ๋ฆฌ๋ ๋๋ง์ ํ๋๋ก ์ค์ ํ ์ ์๋ค
:: ์ฝ๋ ์์
- a์ b์ ๊ฐ์ด ๋ณํ ๋๋ง
computeExpensiveValue
ํจ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผmemoizedValue
๋ด๊ธฐ!
// ์ ์ฉํ
import React from 'react';
const User = (props) => {
return (
///
);
};
export default React.memo(User);