โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
- useMemo
- React.memo
- useCallback
๋ฉ๋ชจ์ด์ ์ด์ ์ ์ปดํจํฐ๊ฐ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ผ ํ ๋, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํจ์ผ๋ก์ ๋์ผํ ๊ณ์ผ์ ํ์ง ์๋๋ก ํ์ฌ, ์๋๋ฅผ ๋์ด๋ ๊ธฐ์ ์ด๋ค. ๋ณดํต ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.
React์์ ๋ฉ๋ชจ์ด์ ์ด์
์ ํ๋ ๋ฐฉ๋ฒ
1. useMemo
2. React.memo
3. useCallback
useMemo
๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ฐ์ํ๋ ์ฐ์ฐ์ ์ต์ ํํ ์ ์๋ค. ์ด์ ๊ฐ์ ๊ธฐ์ตํด๋์๋ค๊ณ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฌํ์ฉํ์ฌ ์ฑ๋ฅ์ ์ต์ ํ ํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค. ๋ฉ๋ชจ์ด์ฆ ๋ ๊ฐ์ returnํ๋ Hook์ด๋ค.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
2์ ์จฐ ์ธ์๋ก ๋์ด์จ ์์กด ์ธ์ ์ค์ ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด 1๋ฒ์งธ ์ธ์์ ํจ์๋ฅผ ์ฌ์คํํ๋ค. ๋ง์ฝ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์๋๋ค๋ฉด ๋งค๋ฒ ์๋กญ๊ฒ ๊ณ์ฐํ์ฌ returnํ๋ค.
ํจ์ ์ปดํฌ๋ํธ์์๋ ๋ผ์ดํ ์ฌ์ดํด์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ React.memo
๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ปดํฌ๋ํธ์ props๊ฐ ๋ฐ๋์ง ์์๋ค๋ฉด, ๋ฆฌ๋ ๋๋งํ์ง ์๋๋ก ์ค์ ํ์ฌ ํจ์ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํ ํด ์ค ์ ์๋ค.
const Component = React.memo((props) => {
return (/*์ปดํฌ๋ํธ ๋ ๋๋ง ์ฝ๋*/)}
);
์ด์ ๊ณผ ๊ฐ์ props๊ฐ ๋ค์ด์ฌ ๋๋ ๋ ๋๋ง ๊ณผ์ ์ ์คํตํ๊ณ ๊ฐ์ฅ ์ต๊ทผ์ ๋ ๋๋ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๋ค.
๋ค๋ง, ์ปดํฌ๋ํธ ๋ด๋ถ์์ useState๊ฐ์ ํ
์ ์ฌ์ฉํ ๋ ์ํ๊ฐ ๋ณ๊ฒฝ ๋๋ฉด ๋ฆฌ๋ ๋๋ง๋๋ค.
useCallback
์ ์ฌ์ฉํ๋ฉด ๋ง๋ค์ด ๋จ๋ ํจ์๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ๋ ํจ์๊ฐ ์๋กญ๊ฒ ์์ฑ๋๋ ๊ฒฝ์ฐ, ์์ ์ปดํฌ๋ํธ์ Prop์ผ๋ก ์๋ก ์์ฑ๋ ํจ์๊ฐ ๋๊ฒจ์ง๊ฒ ๋๋ฉด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋ ์ ์๋ค.
const [name, setName] = useState('');
const [age, setAge] = useState(0);
const onSave = useCallback(() => saveToServer(name, age), [name, age]);
์์ ์์์ฒ๋ผ name๊ณผ age๊ฐ์ด ๋ณํ์ง ์์ผ๋ฉด ๊ฐ์ ํจ์๊ฐ ์ ๋ฌ๋์ด ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ ์ ์๋ค.
useMemo๋ ํจ์์ ์ฐ์ฐ๋์ด ๋ง์ ๋ ์ด์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฌ์ฉํ๋ ๋ชฉ์ ์ด๊ณ useCallback์ ํจ์๊ฐ ์ฌ์์ฑ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ชฉ์ ์ด๋ค.
๋ฆฌ์กํธ ํ
์ ์ฌ์ฉํ ๋ useState
, useEffect
๋ง ๋ง์ด ์ฌ์ฉํด๋ณด๊ณ ๋๋จธ์ง๋ ์ฌ์ฉํด๋ณธ ์ ์ด ์์๋๋ฐ ์๋กญ๊ฒ ๋ฉ๋ชจ์ด์ ์ด์
์ ๋ํด์ ์๊ฒ ๋์ด ๋ค์ ํ๋ก์ ํธ๋ฅผ ํ ๋์๋ ์ต์ ํ์ ์กฐ๊ธ ๋ ์ ๊ฒฝ์ธ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋งํ๋ฉด์ ๋ฐฐ์์ ์คํฐ๋์์ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๊ธฐ๋ก ํ์๋๋ฐ ์กฐ๊ธ ๋ ๊น๊ฒ ๊ณต๋ถํ์ฌ ๋ค์ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค. ์ค๋๋ ์๊ณ ํ๋ค~
- ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค
- Hooks API Reference
- ๊น๋ฏผ์ค ์ , โ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ (๊ฐ์ ํ)โ, ๊ธธ๋ฒ