์๋
ํ์ธ์. ๋ค์๊ณผ ๊ฐ์ด ํ ๋ useRef
๋์ useMemo
๋ฅผ) ์ฌ์ฉํ ์ ์์ต๋๋ค.
์:
const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);
๋ ์ฐธ์กฐ ๋ชจ๋ DOM ์ฐธ์กฐ์ ํด๋์ค์ ์ธ์คํด์ค ํ๋์ ์ ์ฌํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ์ ์๋ ํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. useRef
๋ฐ useMemo
๋ํ ReactFiberHooks.js ์ฝ๋๋ฅผ ๊ณ ๋ คํ ๋ useRef
๊ฐ useMemo
์ ๋ค๋ฅด๊ฒ ๊ตฌํ๋๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
๊ฐ์ฌ!
์ด๋ฐ ์์ผ๋ก ref ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ง๋ง useMemo
๋ ์ข
์์ฑ์ ์ถ์ ํ๊ณ ๋น๊ตํ๋ฏ๋ก ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค. (๋น ์ข
์์ฑ ๋ฐฐ์ด์ ์ง์ ํ๋๋ผ๋ ๋ฉ๋ชจ ํํฌ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ถ๊ฐ ๊ฐ์์ํ ๊ณต๊ฐ์ด ์์ต๋๋ค.)
์ด๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํด useRef
๊ตฌํ์ ๋น๊ตํ ์ ์์ต๋๋ค.
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920
useMemo
:
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156
๋ ํ ๋ชจ๋ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ฐํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก ref ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ง๋ง
useMemo
๋ ์ข ์์ฑ์ ์ถ์ ํ๊ณ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค. (๋น ์ข ์์ฑ ๋ฐฐ์ด์ ์ง์ ํ๋๋ผ๋ ๋ฉ๋ชจ ํํฌ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ถ๊ฐ ๊ฐ์์ํ ๊ณต๊ฐ์ด ์์ต๋๋ค.)์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด
useRef
๊ตฌํ์ ๋น๊ตํ ์ ์์ต๋๋ค.
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920
useMemo
:
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156๋ ํํฌ ๋ชจ๋ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ฐํํ์ฌ ๋ค๋ฅด๊ฒ ๊ตฌํ๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์๋
ํ์ธ์, ์ด์ ๊ฐ์ ์ฝ๋๋ฅผ ํฌ๋งทํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น?
@ yaofly2012 GitHub๋ ํน์ ํ์ผ ๊ฐ์ ๋ฐ ์ค ๋ฒํธ์ ๋งํฌํ๋ ๊ฒฝ์ฐ ๋งํฌ ํ์์ ์ง์ ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๋ฐ ์์ผ๋ก ref ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ง๋ง
useMemo
๋ ์ข ์์ฑ์ ์ถ์ ํ๊ณ ๋น๊ตํ๋ฏ๋ก ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค. (๋น ์ข ์์ฑ ๋ฐฐ์ด์ ์ง์ ํ๋๋ผ๋ ๋ฉ๋ชจ ํํฌ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ ์ถ๊ฐ ๊ฐ์์ํ ๊ณต๊ฐ์ด ์์ต๋๋ค.)์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด
useRef
๊ตฌํ์ ๋น๊ตํ ์ ์์ต๋๋ค.https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920
useMemo
:https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156
๋ ํ ๋ชจ๋ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์ฑ๋ฅ์ ๋ฐํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.