useComposedRef
自分の要素へのrefを保持しつつ、親から渡されたrefにもそのまま転送します。
pnpm dlx shadcn@latest add https://hextaui.com/r/use-composed-ref.jsonフックと、その依存関係をプロジェクトに追加します。
次のコードをコピーしてプロジェクトに貼り付けてください。
hooks/use-composed-ref.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
React 19 では、ref は通常の prop です。コンポーネント自身もその要素を必要とする場合、ref は2つあるのに ref 属性は1つだけです。このフックは、読み取り用のオブジェクト ref と、両方の ref を埋めるコールバックを提供します。
これはコンパイルされますが、親の ref が失われるため、親では ref.current が null のままです。useComposedRef を使うと、親とコンポーネントの両方が要素を受け取ります。
- 返される
inputRefは通常のRefObjectなので、useAutosizeやuseInvalidShakeのように、それを期待するフックに渡せます。 - 親の ref が変わらない間は
setRefも同一性を保つため、React がレンダリングのたびにデタッチと再アタッチを行うことはありません。 - オブジェクト ref、コールバック ref、ref なしのいずれでも動作します。
転送された ref を自分のオブジェクト ref と1つだけ組み合わせる場合(ほとんどのコンポーネントがそうです)は useComposedRef を使います。3つ以上を組み合わせる場合、そのうちの1つが別のフックのコールバック ref である場合、または転送されたコールバック ref が React 19 のクリーンアップ関数を返す場合は、useMergedRef を使います。useComposedRef は、デタッチ時にクリーンアップを実行する代わりに、コールバック ref を null で呼び出します。
| プロパティ | 型 | デフォルト |
|---|---|---|
refコンポーネントが受け取った ref。 | Ref<T> | undefined | – |
| 戻り値 | 説明 |
|---|---|
[0] RefObject<T | null> | 要素に対する自分自身の ref。 |
[1] (node: T | null) => void | 要素の ref に渡します。両方の ref を埋めます。 |
Input、Textarea、NativeSelect、Field、InputGroup。
- Fieldコントロールに紐付いたラベル、説明、エラーです。バリデーション状態とフォーム向けのレイアウトを備えています。
- Input3つのサイズ、無効状態と読み取り専用状態、ネイティブのバリデーションスタイル、スマートフォンでズームされない16pxのタッチ用フォントを備えたテキスト入力です。
- Input groupアイコン、テキスト、ボタン、キーボードのヒントを付けられる入力欄です。1つのボーダーとフォーカスリングを共有します。
- Native selectブラウザー標準のselectを、Inputに合わせてスタイルしたものです。控えめなプレースホルダー、Fieldのサポート、あらゆるデバイスでのOSピッカーを備えています。
- Sidebarアイコンのみ、またはオフキャンバスに折りたたまれ、ヘッダーの下に固定され、スマートフォンではスワイプできるシートになるアプリのサイドバーです。
- Textarea最小行数と最大行数の間で、書いた内容に合わせて滑らかに伸びる複数行テキストです。カウンター、バリデーション、送信ショートカットを備えています。