react-patterns について
モダンな React インターフェースを実装する開発者向けのパターンガイダンスです。コンポーネント構成、フック、状態管理、パフォーマンス、アクセシビリティを扱います。
主な機能
- 01コンポーネント構成パターン
- 02カスタムフックの指針
- 03状態管理の選択
- 04パフォーマンスとコード分割
- 05エラー処理とアクセシビリティ
活用シーン
- 01再利用可能な複合コンポーネントの設計
- 02フォームやデータ取得用フックの作成
- 03インターフェースの状態管理方式の選択
- 04大規模コンポーネントや操作の最適化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ majesticlabs-dev/ majestic-marketplace --skill react-patternsインストール後、Claude Code で/react-patternsを入力して読み込まれたか確認します。
同梱ファイルreferences/examples.md
詳細
React パターン
フック、コンポーネントの合成、状態管理、並行機能を使用して最新の React パターンを実装するための専門的なガイダンスです。
基本理念
| 優先事項 | 説明 |
|---|---|
| コンポーネントの合成 | シンプルで再利用可能なパーツから複雑な UI を構築します |
| 関心の分離 | ビジネスロジックはフックに、表示はコンポーネントに配置します |
| 暗黙的より明示的に | データフローと状態管理を明確にします |
| パフォーマンス | 再レンダリングを最小限に抑え、負荷の高い計算を最適化します |
| アクセシビリティ | 誰もが利用でき、キーボードで操作できるインターフェースを構築します |
パターンのカテゴリー
コンポーネント合成パターン
| パターン | 用途 | 例 |
|---|---|---|
| 複合コンポーネント | 共有コンテキストを持つ柔軟なコンポーネント API | アコーディオン、タブ、メニュー |
| Render Props | コンポーネント間でロジックを共有します | MouseTracker、スクロール位置 |
| 高階コンポーネント | 機能を追加するためにコンポーネントをラップします | withAuth、withLoading |
完全なコード例については、references/examples.md を参照してください。
カスタムフックのパターン
| フック | 目的 |
|---|---|
useApi | 読み込み/エラー状態を伴うデータ取得 |
useForm | バリデーションを伴うフォーム状態管理 |
useDebounce | 急速に変化する値のデバウンス |
usePrevious | 状態/プロパティの以前の値へのアクセス |
useLocalStorage | 状態を localStorage に永続化 |
実装については、references/examples.md を参照してください。
状態管理パターン
| 種類 | 使用する場面 | 例 |
|---|---|---|
| useState | シンプルな UI 状態 | トグル、フォーム入力、ページネーション |
| useReducer | 複雑な状態ロジック | 複数ステップのフォーム、ショッピングカート |
| Context | テーマ、認証、アプリ全体の設定 | ユーザーセッション、機能フラグ |
| URL State | 共有やブックマークが可能な状態 | フィルター、検索パラメーター、タブ |
| Server State | API データ(React Query/SWR) | ユーザープロフィール、商品カタログ |
| Global Store | 複数機能にまたがる連携 | 複雑なアプリ向けの Zustand/Redux |
Context + useReducer パターン:複数のアクションがあり、コンポーネント間で共有する必要がある複雑な状態に最適です。references/examples.md を参照してください。
パフォーマンスの最適化
メモ化を使用する場面
| ツール | 使用する場面 |
|---|---|
useMemo | 負荷の高い計算(大きな配列のソート、フィルタリング) |
useCallback | メモ化された子コンポーネントに渡す関数、または依存配列で使用する関数 |
memo | 同じ props で頻繁に再レンダリングされる純粋コンポーネント |
コード分割の戦略
| レベル | 実装 |
|---|---|
| ルートレベル | lazy(() => import('./pages/Dashboard')) |
| コンポーネントレベル | チャートやエディターなどの負荷の高いコンポーネント |
| 条件付き | 機能フラグで制御される機能 |
lazy コンポーネントは必ず、適切なフォールバックを指定した <Suspense> でラップしてください。
エラー処理
| 方針 | 適用範囲 |
|---|---|
| Error Boundaries | コンポーネントツリーのエラー(クラスコンポーネント) |
| try/catch | 非同期処理、イベントハンドラー |
| React Query onError | 自動リトライを伴う API エラー |
Error Boundary の配置:致命的なエラーにはアプリレベル、適切に機能を縮退させるには機能レベルに配置します。
アクセシビリティのパターン
| 要件 | 実装 |
|---|---|
| フォーカス管理 | モーダルを閉じたときに起動元へフォーカスを戻します |
| キーボード操作 | インタラクティブ要素で Tab、Enter、Escape をサポートします |
| ARIA ラベル | アイコンボタン、表示ラベルのないフォーム入力 |
| セマンティック HTML | <nav>、<main>、<button> を適切に使用します |
アクセシブルなモーダルの実装については、references/examples.md を参照してください。
ベストプラクティスのチェックリスト
- ロジックが再利用される場合や複雑な場合(20 行超)は、カスタムフックを抽出します
- 柔軟なコンポーネント API には、複合コンポーネントを使用します
- 計算コストの高い処理や、メモ化された子コンポーネントに渡すコールバックをメモ化します
- ルートと負荷の大きいコンポーネントをコード分割します
- 適切なレベルにエラーバウンダリーを配置して、エラーを処理します
- モーダルや動的コンテンツでフォーカスを管理します
- アクセシビリティのために、セマンティック HTML と ARIA ラベルを使用します
- コンポーネントから切り離して、フックを単体でテストします
- コンポーネントは小さく保ちます(200 行未満)
- 状態は使用箇所の近くに配置します
コメント
Markdown 対応