158 文字
1 分
Reactでrefをマージする
UI ライブラリなどを React で作成していると、Props から受け取った ref を内部的な ref とマージしたくなることがある。 次のようなコードを書けばいい。
import { useMemo } from "react";
export type ReactRef<T> = React.RefCallback<T> | React.MutableRefObject<T>;
export function assignRef<T = unknown>( ref: ReactRef<T> | null | undefined, value: T) { if (ref === null || ref === undefined) return;
if (typeof ref === "function") { ref(value); return; }
try { ref.current = value; } catch (error) { throw new Error(`Cannot assign value '${value}' to ref '${ref}'`); }}
export function mergeRefs<T>(...refs: (ReactRef<T> | null | undefined)[]) { return (node: T | null) => { refs.forEach((ref) => { assignRef(ref, node); }); };}
export function useMergeRefs<T>(...refs: (ReactRef<T> | null | undefined)[]) { return useMemo(() => mergeRefs(...refs), refs);}
Reactでrefをマージする
https://blog.ohirunewani.com/posts/merge-refs-in-react/