์žฌ๋ฐŒ๊ฒŒ ํ•ฉ์‹œ๋‹ค

๊ธฐ๋กํ•˜๊ธฐ, ๊ฐ€์‹œํ™”ํ•˜๊ธฐ

React

Custom Hook์€ ํ•จ์ˆ˜์ผ๊นŒ ์ปดํฌ๋„ŒํŠธ์ผ๊นŒ

์€๋˜๋”” 2022. 9. 9. 17:24

 

custom hook์„ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€๋ฐ, ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฐœ๋…์ธ์ง€ ์™€๋‹ฟ์ง€ ์•Š์•„์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ดค๋‹ค. 

 

์ปค์Šคํ…€ ํ›…์ด๋ž€?

์ œ๋ชฉ์— ๋จผ์ € ๋‹ต์„ ํ•˜์ž๋ฉด ์ปค์Šคํ…€ ํ›…์€ ํ•จ์ˆ˜๋‹ค. ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ hook์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ, ์šฐ๋ฆฌ๋Š” ์ปค์Šคํ…€ ํ›…์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ hook์ด๋ผ ํ•จ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” useState, useEffect ๋“ฑ์„ ์ผ์ปซ๋Š”๋‹ค.

 

์ฆ‰ Custom hook์€ ํ•จ์ˆ˜์ด๋ฉฐ, ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€์˜ ์ฐจ์ด์ ์€ ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ hook์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

๐Ÿ’๐Ÿป‍โ™‚๏ธ : ์•— ๊ทธ๋ ‡๋‹ค๋ฉด ์ผ๋ฐ˜ํ•จ์ˆ˜์—์„œ๋Š” hook์„ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ธ๊ฐ€์š”?

โžก๏ธ ๊ทธ๋ ‡๋‹ค. ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ๋Š” hook์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

 

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, hook์„ ์‚ฌ์šฉํ•  ๋•Œ ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์ด ์กด์žฌํ•œ๋‹ค.

1. React ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ์—์„œ๋งŒ hook์„ ํ˜ธ์ถœํ•  ๊ฒƒ. 
2. ์ผ๋ฐ˜ Javascript ํ•จ์ˆ˜์—์„œ hook์„ ํ˜ธ์ถœํ•˜์ง€ ๋ง ๊ฒƒ.

๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด hook์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฟ์ด๋‹ค.

React ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์™€ Custom Hook

 

๊ผญ use[์–ด์ฉŒ๊ตฌ] ๋ผ๊ณ  ๋„ค์ด๋ฐ ํ•ด์•ผ ํ• ๊นŒ?

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์ •๋‹ต์€ โญ•๏ธ ๋‹ค. ์ปค์Šคํ…€ ํ›…์˜ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ use๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์•ž์„  ๋‚ด์šฉ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜๋ช…์„ use์–ด์ฉŒ๊ตฌ๋กœ ์ง€์Œ์œผ๋กœ์จ React์—๊ฒŒ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ปค์Šคํ…€ ํ›…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค. 

 

์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

 

ํ›…์„ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ง์ด ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ์ด๋ฅผ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

  • ์นœ๊ตฌ์˜ ์ ‘์† ์ƒํƒœ๋ฅผ state๋กœ ๊ด€๋ฆฌํ•˜๊ณ , state์— ๋”ฐ๋ผ UI๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • useEffect๋ฅผ ์ด์šฉํ•ด ์นœ๊ตฌ์˜ ์ ‘์† ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๋‘ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ™์€ ๋กœ์ง์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ ์ด๋Ÿด ๋•Œ ํ•ด๋‹น ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์•ž์„œ๋„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ Custom Hook์€ ํ•จ์ˆ˜๋‹ค. ์ธ์ž์™€ ๋ฆฌํ„ด๊ฐ’์„ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” isOnline์ด๋ผ๋Š” ์ƒํƒœ๊ฐ’์„ ๋ฆฌํ„ดํ–ˆ๋‹ค.

 

์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ผํ•œ Hook์„ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด?

Each call to a Hook gets isolated state. 

 

useState, useEffect๊ฐ€ ํฌํ•จ๋œ ์ปค์Šคํ…€ ํ›…์„ ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ˜ธ์ถœํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ์ปค์Šคํ…€ ํ›…์„ ํ˜ธ์ถœํ•œ ๊ฒƒ์ด์ง€๋งŒ, React๋Š” ์ด๋ฅผ ๊ทธ์ € ์ผ๋ฐ˜์ ์ธ useState, useEffect๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒƒ์œผ๋กœ ์—ฌ๊ธด๋‹ค๊ณ  ํ•œ๋‹ค.  ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ states, effects๊ฐ€ ์„œ๋กœ ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ๋™์ผํ•œ hook์„ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.