๐ฅ ์ค๋ ์ด๋์ ๋์ ํด๋ณด์ จ๊ณ , ๋ฌด์์ ๋ฐฐ์ฐ์ จ๋์?
๐ ํ์ตํ์๋ฉด์ ๊ถ๊ธํ์ ๋ถ๋ถ์ด๋, ์ด๋ ค์ ๋ ์ ์ ๋ญ๊น์?
- useCallback์ ์์กด์ฑ ๋ ๊ณต๋ถํด๋ณด๊ธฐ.. ํจ์๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ๋ ์ธ์ ์ด๊ณ ์์กด์ฑ ๋ฐฐ์ด์ ๋ญ ์ถ๊ฐํด์ผ ํ๋๊ฑฐ์ง..?
- ์ค๋๋ง์ ์ฝ๋ฉํ ์คํธํด์ ๊ทธ๋ฐ๊ฐ, ์ ๋ฌธ์ ๋ง 3๋ฒ์ ํ์๋๋ฐ ํ ๋๋ง๋ค ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ถํ์ํ ๋ฐ๋ณต๋ฌธ์ ์ฐ๊ฒ ๋๋ค. ๋ ธ๋ ฅํ์..๐ข
๐ ๋ด์ผ์ ์ด๋ป๊ฒ ํด๋ณด๊ณ ์ถ์ผ์ธ์?
- ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ 1๊ฐ ์ด์ ํ๊ธฐ
- React์ useCallback ๋ ๊ณต๋ถํ๊ณ ์จ๋ณด๊ธฐ
React.memo์ useCallback
- ์ปดํฌ๋ํธ์
props
,state
,context
๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ทธ ์ปดํฌ๋ํธ ํจ์๋ฅผ ์ฌ์คํํ๋ฉฐ ํ๋ฉด์ ๋ํ๋ ๊ฒ์ ํ์ธํ๋ค. - ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ๊ฐ์ ์ด์ ๋ก ์ฌ์คํ๋๋ค๋ฉด ์์ ์ปดํฌ๋ํธ๋ ์ฌ์คํ๋๋ค. ์์ ์ปดํฌ๋ํธ์ props ๊ฐ์ด ๋ณํ์ง ์๋๋ผ๋ ์ฌ์คํ๋๋ค.
- ์ปดํฌ๋ํธ๊ฐ ์ฌ์คํ๋๋ค๊ณ ํด์ ์ค์ DOM์ด ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ ์๋๋ค. ๋ฆฌ์กํธ DOM์ ๊ฐฑ์ ์ ํ์ ์ํ ์ฐจ์ด๋ฅผ ์ธ์ํ๊ณ ์ค์ DOM์ ๋ณํ๋ ๋ถ๋ถ๋ง ์กฐ์ํ๋ค.
React.memo
๋ ์ธ์๋ก ๋ค์ด๊ฐ ์ปดํฌ๋ํธ์ ์ด๋ค props๊ฐ ์ ๋ ฅ๋๋์ง ํ์ธํ๊ณ ์ ๋ ฅ๋๋ ๋ชจ๋ props์ ์ ๊ท ๊ฐ์ ํ์ธํ ๋ค ๊ธฐ์กด props์ ๋น๊ตํ๋ค. ๊ทธ๋ฆฌ๊ณ props๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ์๋ง ์ปดํฌ๋ํธ๋ฅผ ์ฌ์คํ ๋ฐ ์ฌํ๊ฐํ๋ค.- props๊ฐ ๋ณํ์ง ์๋ ๊ฒฝ์ฐ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํด์ฃผ๋ฏ๋ก ์ต์ ํ์ ๋์์ด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ ์ฒด์ ์ผ๋ก ์ฌ์ฉํ์ง ์์๊น? memo๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ๊ธฐ์กด ๊ฐ๊ณผ ์ ๊ท ๊ฐ์ ๋น๊ตํด์ผ ํ๋ฏ๋ก ๊ธฐ์กด ๊ฐ์ ์ ์ฅํ ๊ณต๊ฐ๊ณผ ๋น๊ต ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ฑ์ ํฌ๊ธฐ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ ์ ํ๊ฒ ๊ณ ๋ คํด์ผ ํ๋ค.
memo๋ก ๊ฐ์ผ ์ปดํฌ๋ํธ์ ์ฐธ์กฐ ํ์ ์ props๋ก ์ ๋ฌํ๋ฉด ๊ทธ ๊ฐ์ด ๋์ผํ๋๋ผ๋ ์ฌ์คํ๋๋ค. ์๋ ์ฝ๋์์
Button
์ onClick์ด๋ผ๋ props๋ก ํจ์๋ฅผ ์ ๋ฌ ๋ฐ๋๋ค. onClickHandler๋App
๋ด๋ถ์์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์App
์ด ๋ค์ ๋ ๋๋ง๋ ๋๋ง๋ค ์๋กญ๊ฒ ์์ฑ๋์ด ๋งค๋ฒ ๊ธฐ์กด props์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ธ์๋๋ค.{} === {}๋ false
์ ๊ฐ๋ค.1 2 3 4 5 6 7 8 9 10
const Button = React.memo((props) => { return <button onClick={props.onClick}>{props.children}</button>; }); const App = () => { const onClickHandler = () => { /* ... */ }; return <Button onClick={onClickHandler}>Click!</Button>; };
- ์ฐธ์กฐ ํ์
์ ๋ฐ์ดํฐ๋ฅผ props๋ก ์ ๋ฌํ๋ฉด์ ์ฌ์คํ์ ๋ฐฉ์งํ๋ ค๋ฉด
useCallback
์ ์ฌ์ฉํด์ผ ํ๋ค. ํน์ ๊ฐ์ฒด๋ฅผ useCallback์ผ๋ก ๊ฐ์ธ๋ฉด ๊ทธ ๊ฐ์ฒด๋ ์ปดํฌ๋ํธ๊ฐ ์ฌ์คํ๋ ๋ ์ฌ์ฌ์ฉํ๊ฒ ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ ์์ ์ ์์กด์ฑ์ ์ถ๊ฐํด์ ์๋ ค์ค ์ ์๋ค.1 2 3
const onClickHandler = useCallback(() => { /* ... */ }, []);
- ์ฐธ์กฐ ํ์
์ ๋ฐ์ดํฐ๋ฅผ props๋ก ์ ๋ฌํ๋ฉด์ ์ฌ์คํ์ ๋ฐฉ์งํ๋ ค๋ฉด