React/上級/Lesson 21
forwardRefとuseImperativeHandle
25分·theory
このチャプター
2/2
TypeScript
forwardRefとuseImperativeHandle
💡 なぜ学ぶべきか?
🎯
ライブラリ開発者が必ず知っておくべき上級テクニックです。
💼
非制御コンポーネントを作成する際に必須です。
⚡
大企業の技術面接でよく出題される概念です。
🏢 실무에서는
UIライブラリを作成する際、親コンポーネントが子のinputを直接制御する必要がある場合があります。たとえば「フォーカスを当てる」「値をリセットする」といった命令的な操作が必要なときに、forwardRefとuseImperativeHandleを使用します。これはライブラリ開発者にとって必須のスキルです。
forwardRefとは?
forwardRefとuseImperativeHandle
問題:refはpropsで渡せない
デフォルトでは、refは特殊なpropであるため、子コンポーネントに転送されません。
forwardRef
親から渡されたrefを、子コンポーネント内部のDOMまたはインスタンスに接続します。
useImperativeHandle
forwardRefと組み合わせて使用し、親に公開するインターフェースを明示的に定義します。
ユースケース
- ▸カスタムInputコンポーネントの
focus()制御 - ▸スクロール位置の制御
- ▸フォームライブラリとの統合(React Hook Formの
Controller) - ▸再利用可能なコンポーネントライブラリの開発
React 19での変更
React 19以降、forwardRefなしでrefを通常のpropとして受け取ることができます。
💡 実践的なヒント
- ▸displayName:
forwardRefコンポーネントにdisplayNameを設定 → React DevToolsで名前が表示される - ▸useImperativeHandle推奨: DOM全体を公開する代わりに、必要なメソッドだけを公開してカプセル化を高める
- ▸React 19: refを通常のpropとして渡せるため、
forwardRefは不要(後方互換性は維持) - ▸React Hook Form:
Controllerコンポーネントの内部でforwardRefを活用 - ▸TypeScript:
forwardRef<RefType, PropsType>ジェネリクスで型安全に使用
⚛️ Reactパターン — forwardRefとuseImperativeHandle
forwardRefとuseImperativeHandleをReactでどのように使うか、コードとともにステップごとに学びましょう。
1
🧩
1. forwardRefとuseImperativeHandleが必要なシナリオ
これらの機能が必要な状況。
↓
2
💻
2. コードの記述
forwardRefとuseImperativeHandleの基本的な使い方。
↓
3
🎨
3. レンダリング結果
ユーザーが見る画面。
↓
4
💡
4. 実務でのヒント
よくある落とし穴とベストプラクティス。
🎮 forwardRefとuseImperativeHandle — ステップごとに理解する
各ステップをクリックして内容を読み、「理解できました」ボタンで進捗を確認しましょう。
🖥️ 実行結果 — レンダリングされたReactコンポーネント
✏️ React 코드 수정하기 (클릭해서 열기)
⚛️ React 18 + Babel Standalone — まず結果を確認し、エディタで自由に編集できます。
理解度チェック
forwardRefが必要な状況はどれですか?
先に読むとよい概念: Error Boundary + Suspense
次のおすすめ: TypeScript + React