useRef, useImperativeHandle

useRef, useImperativeHandle

Tags
React
Frontend
Published
Author

useRefλŠ” λ Œλ”λ”©μ— ν•„μš”ν•˜μ§€ μ•Šμ€ 값을 μ°Έμ‘°ν•  수 μžˆλŠ” Reactν›…μž…λ‹ˆλ‹€.

const ref = useRef(initialValue)

useRef(initialValue)

import { useRef } from 'react'; function MyComponent() { const intervalRef = useRef(0); const inputRef = useRef(null); // ...
λ§€κ°œλ³€μˆ˜
initialValue : ref 객체의 current ν”„λ‘œνΌν‹° 초기 μ„€μ •κ°’μž…λ‹ˆλ‹€.
λ°˜ν™˜κ°’
current : μ²˜μŒμ—λŠ” μ „λ‹¬ν•œ initialValue둜 μ„€μ •λ©λ‹ˆλ‹€. ref 객체λ₯Ό JSXλ…Έλ“œμ˜ ref μ†μ„±μœΌλ‘œ React에 μ „λ‹¬ν•˜λ©΄ ReactλŠ” current ν”„λ‘œνΌν‹°λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

refλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€μŒμ„ 보μž₯ν•©λ‹ˆλ‹€.

  • (λ Œλ”λ§ ν•  λ•Œλ§ˆλ‹€ μž¬μ„€μ •λ˜λŠ” 일반 λ³€μˆ˜μ™€ 달리) λ¦¬λ Œλ”λ§ 사이에 정보λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • (λ¦¬λ Œλ”λ§μ„ μ΄‰λ°œν•˜λŠ” state λ³€μˆ˜μ™€ 달리) 변경해도 λ¦¬λ Œλ”λ§μ„ μ΄‰λ°œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • (정보가 κ³΅μœ λ˜λŠ” μ™ΈλΆ€ λ³€μˆ˜μ™€ 달리) 각각의 μ»΄ν¬λ„ŒνŠΈμ— 둜컬둜 μ €μž₯λ©λ‹ˆλ‹€.

λ Œλ”λ§ μ€‘μ—λŠ” ref.currentλ₯Ό μ“°κ±°λ‚˜ μ½μ§€λ§ˆμ„Έμš”.

useImperativeHandle

ref둜 λ…ΈμΆœλ˜λŠ” 핸듀을 μ‚¬μš©μžκ°€ 직접 μ •μ˜ν•  수 있게 ν•΄μ£ΌλŠ” React ν›…μž…λ‹ˆλ‹€.

useImperativeHandle(ref, createHandle, dependencies?)

import { forwardRef, useImperativeHandle } from 'react'; const MyInput = forwardRef(function MyInput(props, ref) { useImperativeHandle(ref, () => { return { // ... your methods ... // ... λ©”μ„œλ“œλŠ” 여기에 μž‘μ„±ν•©λ‹ˆλ‹€ ... }; }, []);
λ§€κ°œλ³€μˆ˜
  • ref : forwardRef λ Œλ” ν•¨μˆ˜μ—μ„œ 두 번째 인자둜 받은 refμž…λ‹ˆλ‹€.
  • createHandle : μΈμžκ°€ μ—†κ³  λ…ΈμΆœν•˜λ €λŠ” ref 핸듀을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
  • optional dependencies : createHandle μ½”λ“œ λ‚΄μ—μ„œ μ°Έμ‘°ν•˜λŠ” λͺ¨λ“  λ°˜μ‘ν˜• 값을 λͺ¨λ“  λ°˜μ‘ν˜• 값을 λ‚˜μ—΄ν•œ λͺ©λ‘μž…λ‹ˆλ‹€.
Β