useMergedRef
任意の数のコールバックrefとオブジェクトrefを1つにまとめます。それぞれにReact 19のrefクリーンアップが適用されます。
0px
pnpm dlx shadcn@latest add https://hextaui.com/r/use-merged-ref.jsonフックと、その依存関係をプロジェクトに追加します。
次のコードをコピーしてプロジェクトに貼り付けてください。
hooks/use-merged-ref.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
要素の ref は1つだけですが、コンポーネントは多くの場合、それを複数の場所に渡す必要があります。ref を転送した親、effect 用のローカル ref、コールバック ref を通じて動作するフックなどです。useMergedRef は、それらすべてに渡す1つのコールバックを返します。
要素がアタッチされると、すべての ref がそれを受け取ります。オブジェクト ref は .current が設定され、コールバック ref はノードとともに呼び出されます。マージされたコールバックは React 19 方式のクリーンアップを返します。デタッチ時には、各コールバック ref 自身のクリーンアップを実行し、返していなければ ref を null で呼び出し、オブジェクト ref は null にリセットします。
そのため、オブザーバーやリスナーなど、要素の寿命に結び付いたものは、コールバック ref に置くのが適しています。セットアップと破棄が一箇所にまとまり、他の ref とマージしても動作し続けます。
- マージされたコールバックは、いずれかの ref が変わるたびに変わります。インラインのアロー関数はレンダリングのたびに新しい ref になるため、React は毎回要素をデタッチして再アタッチします。コールバック ref は
useCallbackで包んでください。 undefinedとnullの ref はスキップされるので、省略可能な props をそのまま渡せます。- 転送された ref 1つとローカルのオブジェクト ref の組み合わせなら、useComposedRef の方が短く書けます。
| プロパティ | 型 | デフォルト |
|---|---|---|
...refsオブジェクト ref、コールバック ref、または undefined。 | Array<Ref<T> | undefined> | – |
| 戻り値 | 説明 |
|---|---|
(node: T | null) => () => void | 要素の ref に渡します。統合されたクリーンアップを返します。 |
Field と InputGroup。