๐Ÿง‘๐Ÿปโ€๐Ÿ’ป useImperativeHandle


useImperativeHandle์€ ref๋กœ ๋…ธ์ถœ๋˜๋Š” ํ•ธ๋“ค์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” React ํ›…์ด๋‹ค.

๐Ÿช useImperativeHandle ๋ฌธ๋ฒ•

useImperativeHandle(ref, createHandle, dependencies?)
// createHandle: ์ธ์ž๊ฐ€ ์—†๊ณ  ๋…ธ์ถœํ•˜๋ ค๋Š” ref ํ•ธ๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ, ๋˜ํ•œ ์ปค์Šคํ…€ ํ›…์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๋‹ค. (React ํ›…)
  • undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (return X)

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ์ฐธ๊ณ ํ•˜๊ธฐ


๐Ÿช ์ฃผ์˜ ์‚ฌํ•ญ

  • ref๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  props๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ํ•„์ˆ˜์ ์ธ ํ–‰๋™์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ex) ํŠน์ • ๋…ธ๋“œ๋กœ ์Šคํฌ๋กคํ•˜๊ธฐ, ๋…ธ๋“œ์— ์ดˆ์  ๋งž์ถ”๊ธฐ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ด‰๋ฐœํ•˜๊ธฐ, ํ…์ŠคํŠธ ์„ ํƒํ•˜๊ธฐ ๋“ฑ
  • prop์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ref๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ex) ์˜ˆ๋ฅผ ๋“ค์–ด, Modal ์ปดํฌ๋„ŒํŠธ์—์„œ {open, close}์™€ ๊ฐ™์€ ๋ช…๋ นํ˜• ํ•ธ๋“ค๋กœ ๋…ธ์ถœํ•˜๋Š” ๋Œ€์‹  <Modal isOpen={isOpen} />๊ณผ ๊ฐ™์€ isOpen prop์„ ๊ถŒ์žฅํ•œ๋‹ค. ์ด๋กœ์จ ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ปดํฌ๋„ŒํŠธ์˜ ๋…๋ฆฝ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค. Effect๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด prop์„ ํ†ตํ•ด ๋ช…๋ นํ˜• ๋™์ž‘์„ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ํ™œ์šฉ ๋ฐ ์ƒ๊ฐํ•  ๊ฑฐ๋ฆฌ


๐Ÿช useImperativeHandle์™€ forwardRef์˜ ํ™œ์šฉ

  • forwardRef์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ

    ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํš๋“ํ•˜๊ณ  useImperativeHandle์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆํผ๋Ÿฐ์Šค์— ๋…ธ์ถœํ•  ๋ฉ”์„œ๋“œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ด๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.

  • forwardRef ์—†์ด ์‚ฌ์šฉํ•  ๋•Œ

    ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ํŠน์ • ๋ช…๋ นํ˜• ๋™์ž‘์„ ์™ธ๋ถ€๋กœ ๋…ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— forwardRef ์—†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


์ฐธ๊ณ  https://react-ko.dev/reference/react/useImperativeHandle

profile
FE ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€

Powered by GraphCDN, the GraphQL CDN