React: ์งˆ๋ฌธ : useRef ๋Œ€์‹  useMemo๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2020๋…„ 02์›” 03์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react

์•ˆ๋…•ํ•˜์„ธ์š”. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ๋•Œ useRef ๋Œ€์‹  useMemo ๋ฅผ) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ:

const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);

๋‘ ์ฐธ์กฐ ๋ชจ๋‘ DOM ์ฐธ์กฐ์™€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ํ•„๋“œ์™€ ์œ ์‚ฌํ•œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์œผ๋กœ ์ž˜ ์ž‘๋™ ํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. useRef ๋ฐ useMemo ๋Œ€ํ•œ ReactFiberHooks.js ์ฝ”๋“œ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ useRef ๊ฐ€ useMemo ์™€ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ์‚ฌ!

Invalid Question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๋Ÿฐ ์‹์œผ๋กœ 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

๋‘ ํ›… ๋ชจ๋‘ ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด๋Ÿฐ ์‹์œผ๋กœ 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

๋‘ ํ›„ํฌ ๋ชจ๋‘ ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜์—ฌ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํฌ๋งทํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
image

@ yaofly2012 GitHub๋Š” ํŠน์ • ํŒŒ์ผ ๊ฐœ์ • ๋ฐ ์ค„ ๋ฒˆํ˜ธ์— ๋งํฌํ•˜๋Š” ๊ฒฝ์šฐ ๋งํฌ ํ˜•์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. ํŒŒ์ผ ์—ด๊ธฐ
  2. ์ค„ ๋ฒˆํ˜ธ๋ฅผ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค
  3. ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด Shift ํ‚ค๋ฅผ ๋ˆ„๋ฅธ ์ฑ„ ๋‹ค๋ฅธ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค.
  4. ํ˜„์žฌ ๊ฐœ์ •ํŒ์— ๊ณ ์ •ํ•˜๋ ค๋ฉด "y"๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.
  5. URL์„ GitHub์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ๊ธฐ
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰