- React에서 제공하는 고차 컴포넌트(Higher-Order Component)로 부모 컴포넌트에서 자식 컴포넌트로 ref를 전달할 수 있게 해줍니다. - 이는 주로 재사용 가능한 컴포넌트 라이브러리를 만들 때 유용하며, 특히 DOM 요소나 클래스 컴포넌트의 인스턴스에 직접 접근해야 할 때 사용됩니다.
[ 더 알아보기 ] 💡 forwardRef 선언하는 곳은 부모 컴포넌트인가? 아니면 자식 컴포넌트인가?
- 자식 컴포넌트에서 선언됩니다. 이는 자식 컴포넌트가 부모로부터 전달받은 ref를 사용할 수 있게 해주는 역할을 합니다. - 자식 컴포넌트에서 forwardRef를 사용하여 컴포넌트를 감싸고, ref를 두 번째 매개변수로 받아 사용합니다. - 부모 컴포넌트에서는 ref를 생성하고 이를 자식 컴포넌트에 prop으로 전달합니다.
1. SomeComponent: forwardRef로 생성된 새로운 컴포넌트입니다. 2. forwardRef: React에서 제공하는 고차 컴포넌트(Higher-Order Component)입니다. 3. render: 컴포넌트의 렌더링 로직을 포함하는 함수들 입니다. 이 함수는 props와 ref를 인자로 받습니다
import { forwardRef } from"react";
import { forwardRef, useImperativeHandle } from"react";
// 기본 구조 const SomeComponent = forwardRef(render)
// 기본 구조 : 상세-1const SomeComponent = forwardRef(props, ref);
// 기본 구조 : 상세-2const MyInput = forwardRef(functionMyInput(props, ref) {
return (
<label>
{props.label}
<inputref={ref} /></label>
);
});
});
// 기본 구조 : 상세 -3exportconst SomeComponent = forwardRef(({ props }, ref) => {
return (
<></>
)
})
1. ref: 부모 컴포넌트에서 전달받은 ref 객체입니다. 이를 통해 부모 컴포넌트가 자식 컴포넌트의 기능에 접근할 수 있게 됩니다. 2. createHandle: 함수로, 부모 컴포넌트에 노출시키고자 하는 메서드나 속성들을 포함하는 객체를 반환합니다. 이 객체를 통해 자식 컴포넌트의 내부 구현을 숨기면서 필요한 기능만 선택적으로 노출할 수 있습니다. 3. dependencies?: 선택적 파라미터로, 의존성 배열입니다. 이 배열 내의 값들이 변경될 때만 createHandle 함수가 재실행됩니다. 이를 통해 성능을 최적화할 수 있습니다.
- forwardRef를 사용하여 부모로부터 전달받은 ref를 처리합니다. - stopwatchHandler 객체를 통해 실제 스톱워치 기능을 구현합니다. - useImperativeHandle을 사용하여 부모 컴포넌트에서 접근 가능한 메서드(start, pause, stop)를 정의합니다.