๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section4 Unit3 [React] ์‹ฌํ™” - Virtual DOM๊ณผ React Hooks

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜: https://javascript.plainenglish.io/react-the-virtual-dom-comprehensive-guide-acd19c5e327a


Section4 Unit3 [React] ์‹ฌํ™” - Virtual DOM๊ณผ React Hooks

 

๐Ÿ“Œ Chapter1. React ์‹ฌํ™”

• React์˜ Virtual DOM

์ถœ์ฒ˜: https://programmingwithmosh.com/react/react-virtual-dom-explained/

 React๋Š” UI์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚œ ์š”์†Œ๋“ค์„ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก Virtual DOM์ด๋ผ๋Š” ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ์ด๋Š” ์‹ค์ œ DOM์˜ ์‚ฌ๋ณธ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ, React๋Š” ์‹ค์ œ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹  ์ด ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€ํ™” ์ „๊ณผ ๋ณ€ํ™” ํ›„๋ฅผ ๋น„๊ตํ•˜๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„์„ ์ ์šฉํ•œ๋‹ค.

 

 

๐Ÿ“Œ Chapter2. React Hooks

• ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ Hook์œผ๋กœ useMemo์™€ uesCallback์ด ์žˆ๋‹ค.

→ useMemo๋Š” ๊ฐ’์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Hook์ด๋ผ๋ฉด, useCallback์€ ํ•จ์ˆ˜์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Hook

→ useMemo๋Š” ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋†’์€ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ(์ €์žฅ)ํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ณ , ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰, ๋ณต์žกํ•œ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์บ์‹œ ํ•ด์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊บผ๋‚ด ์“ฐ๋Š” ๋ฐ์— ์œ ์šฉํ•˜๋‹ค.

→ useCallback์€ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์บ์‹œํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์บ์‹œํ•ด์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธํ•œํ…Œ props ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ์— ์œ ์šฉํ•˜๋‹ค.

→ ๋‘˜ ๋‹ค ์ข…์†์„ฑ ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๊ณ , ํ•ด๋‹น ์ข…์†์„ฑ ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ด์ƒ ์ด์ „ ๊ฒฐ๊ณผ/ํ•จ์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

 

Custom Hook

 

custom hook์„ ์‚ฌ์šฉํ•˜๋ฉด,

1. ์ƒํƒœ๊ด€๋ฆฌ ๋กœ์ง์˜ ์žฌํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ ,

2. ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ์ ์€ ์–‘์˜ ์ฝ”๋“œ๋กœ ๋™์ผํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

3. ํ•จ์ˆ˜ํ˜•์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‹ค ๋ช…๋ฃŒํ•˜๋‹ค (e.g. useSomething)

custom hook ์ •์˜ ๊ทœ์น™

1. Custom Hook์„ ์ •์˜ํ•  ๋•Œ๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„ ์•ž์— use๋ฅผ ๋ถ™์ธ๋‹ค.

2. ๋Œ€๊ฐœ์˜ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ ๋‚ด์˜ hooks ๋””๋ ‰ํ† ๋ฆฌ์— Custom Hook์„ ์œ„์น˜ํ•œ๋‹ค.

3. Custom Hook์˜ return ๊ฐ’์€ ์กฐ๊ฑด๋ถ€์—ฌ์„œ๋Š” ์•ˆ๋œ๋‹ค.

 

 custom hook์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” state์™€ Effect๋Š” custom hook์„ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ๋…๋ฆฝ์ ์ด๋‹ค. ๋˜, ํ•œ ์ปดํฌ๋„ŒํŠธ์— ์ปค์Šคํ…€ ํ›…์„ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•ด๋„ ๋…๋ฆฝ์ ์ธ state์™€ effect๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋œ๋‹ค.


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 ๋“œ๋””์–ด React ์‹ฌํ™” ์ฑ•ํ„ฐ์— ๋“ค์–ด๊ฐ”๋‹ค.

 ์ง€๋‚œ 5์ผ๊ฐ„์˜ ์†”๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ, ์–ด๋ ต์ง€ ์•Š์•„ ๋ณด์—ฌ์„œ ์‹œ๊ฐ„ ์•ˆ์— ๋‹ค ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ์ค„ ์•Œ์•˜๋˜ ๊ธฐ๋Šฅ๋“ค์ด ์‚ฌ์‹ค ๊ตฌํ˜„ํ•˜๊ธฐ ๊ฝค ๊นŒ๋‹ค๋กญ๊ณ  ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ณ ๋Š” ์ด๋ ‡๊ฒŒ ์ €๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ์–ด๋Š ๋ง ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ๋ฒ„๋ ธ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ณ ๋ฏผ์„ ํ•˜๋ฉฐ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ๋„, ๋” ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•ด์•ผ ํ•˜๋‹ค๋‹ˆ ๐Ÿฅฒ

 ์ด๋ฒˆ ๋ฆฌ์•กํŠธ ์‹ฌํ™” ์ฑ•ํ„ฐ๋Š” ์†”๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๋ถ€๋”ชํ˜”๋˜ ๋ฌธ์ œ๋“ค์„ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ํ•ด๊ฒฐํ•  ์‹ค๋งˆ๋ฆฌ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ, ๋ผ๋Š” ์ƒ๊ฐ์— ๋ฐ˜๊ฐ€์› ๋‹ค. ์†”๋กœ ํ”„๋กœ์ ํŠธ์— ์ด๋ฒˆ ์œ ๋‹›์—์„œ ํ•™์Šตํ•˜๊ฒŒ ๋  custom hook๋„ ์‚ฌ์šฉํ–ˆ์—ˆ๊ณ , useCallback ํ•จ์ˆ˜๋„ ์‚ฌ์šฉํ–ˆ๋˜ ํ„ฐ๋ผ(์ด๊ฑด ์•Œ๊ณ  ์“ด๊ฑด ์•„๋‹ˆ๋ผ์„œ..) ์ข€ ๋” ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด์—ˆ๋Š”๋ฐ ๋งˆ์นจ ์˜ค๋Š˜ ํ•™์Šต์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๋Š” ํฌ์ธํŠธ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ทธ ๋ถ€๋ถ„๋„ ๊ณ ๋ฏผ์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ™œ์šฉํ•ด ๊ฐœ์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ๋‹ค.

 ์ด๋ฒˆ์ฃผ์—๋Š” ์šฐ์„  ์ง„๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ณ , ์ฃผ๋ง์— ์†”๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ข€ ๋” ๋‹ค๋“ฌ์–ด ๋ด์•ผ๊ฒ ๋‹ค..!

๋ฐ˜์‘ํ˜•