React forwardRef와 useImperativeHandle

2024. 12. 27. 16:06·React

forwardRef

개념

부모 컴포넌트에서 자식 컴포넌트로 ref를 전달할 수 있게 해주는 React 기능입니다.

 

기본적인 사용법

// ref를 props로 받으로면 컴포넌트 함수를 forwardRef로 감싸야 합니다.
const ChildComponent = forwardRef((props, ref) => {
  return <div ref={ref}>...</div>
})

function ParentComponent() {
  const childRef = useRef(null)
  // 속성명 ref로 props를 넘겨줍니다.
  return <ChildComponent ref={childRef} />
}

 

주요 사용 사례

  • 폼 요소 제어 (포커스, 값 검증)
  • 애니메이션 제어
  • 스크롤 위치 조작
  • 미디어 요소 제어 (비디오/오디오 플레이어)

useImperativeHandle

개념

부모에게서 넘겨받은 ref를 원하는대로 수정할 수 있는 훅입니다.

const Input = forwardRef((props, ref) => {
  // useImperativeHandle을 사용하여 ref의 동작을 추가로 정의
  useImperativeHandle(
    ref,
    () => ({
      alert: () => alert(props.value),
    }),
    // useEffect의 deps와 같다
    [props.value],
  )
  return <input ref={ref} {...props} />
})

// 수정된 ref의 사용
function handleClick() {
    // inputRef에 추가한 alert라는 동작을 사용
    inputRef.current.alert()
}

 

 

 

 

 

 

 

[참고자료]

모던 리액트 Deep Dive

 

저작자표시 비영리 변경금지 (새창열림)

'React' 카테고리의 다른 글

React18 useEffectEvent  (0) 2024.12.30
React useLayoutEffect  (2) 2024.12.27
리액트 파이버의 동작  (0) 2024.12.23
리액트 Hooks와 클로저  (0) 2024.12.22
useEffect 사용시 주의해야 할 것들  (1) 2024.12.22
'React' 카테고리의 다른 글
  • React18 useEffectEvent
  • React useLayoutEffect
  • 리액트 파이버의 동작
  • 리액트 Hooks와 클로저
URE
URE
Skill: Javascript, ReactJS, Next.js, React Native ... *블로그 이전 작업(24. 04. 11 ~ 24. 04. 15)
  • URE
    Dev++
    URE
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Browser (6)
      • OS (1)
      • Javascript (14)
      • React (19)
      • Next.js (4)
      • React Native (0)
      • Architecture (1)
      • Network (3)
      • 스크랩 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JS
    javascript
    dataFetching
    react18
    react
    원시타입
    react concurrent
    swr
    자바스크립트
    리액트
    리덕스
    상태관리라이브러리
    URL
    Redux
    참조타입
    IP
    TCP
    Port
    리액트 코어
    브라우저
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
URE
React forwardRef와 useImperativeHandle
상단으로

티스토리툴바