🤣
React Hooksの10種類を理解する(Additional: useImperativeHandle)
React Hooksの10種類を理解する(Additional: useImperativeHandle)
前提知識(Tips)
下層のDOM componentにrefを「転送」する
function SampleButton(props) {
return (
<button className="SampleButton">
{props.children}
</button>
);
}
通常であれば、buttonの関数componentはおおよそこのような感じとなる。
このSampleButton
を使用する他のcomponentは、内側のbutton
DOM要素に対するrefを取得する必要はない。
しかし、ときにこのような末梢のcomponentは、通常のDOM(input
やbutton
など)と同様のの頻度で使用されることがあり、
focusやselect, animationなどにおいてDOMノードにアクセスせざるをえない状態になるかもしれない。
React.forwardRef
は、渡されたrefを受け取って、それをさらに下層のcomponentに渡すことができるようになる。
const SampleButton = React.forwardRef((props, ref) => (
<button ref={ref} className="SampleButton">
{props.children}
</button>
));
const ref = React.createRef();
<SampleButton ref={ref}>Click me!</SampleButton>;
useImperativeHandle
useImperativeHandle
は、refが使用された際の親コンポーネントに渡されるinstance値をカスタマイズするhooksである。forwardRef
とともに用いる。
function FancyInput(props, ref) {
const inputRef = useRef();
useImperativeHandle(ref, () => ({
focus: () => {
inputRef.current.focus();
}
}));
return <input ref={inputRef} ... />;
}
FancyInput = forwardRef(FancyInput);
Discussion