ルートルート
「ルート」ルート (app/root.tsx
) は、Remix アプリケーションで 必須 の唯一のルートです。これは、routes/
ディレクトリ内のすべてのルートの親であり、ルート <html>
ドキュメントのレンダリングを担当するためです。
それ以外は、ほとんど他のルートと同じであり、標準のルートエクスポートをすべてサポートしています。
headers
meta
links
loader
clientLoader
action
clientAction
default
ErrorBoundary
HydrateFallback
handle
shouldRevalidate
ルートルートはドキュメントを管理するため、Remix が提供するいくつかの「ドキュメントレベル」コンポーネントをレンダリングするのに適切な場所です。これらのコンポーネントは、ルートルート内で一度だけ使用する必要があり、ページを正しくレンダリングするために Remix が把握または構築したすべてのものが含まれています。
Layout エクスポート
ルートルートはすべてのルートのドキュメントを管理するため、追加のオプションの Layout
エクスポートもサポートしています。この RFC で詳細を読むことができますが、レイアウトルートには 2 つの目的があります。
- ルートコンポーネント、
HydrateFallback
、およびErrorBoundary
全体でドキュメント/「アプリシェル」を複製することを回避します。 - ルートコンポーネント/
HydrateFallback
/ErrorBoundary
を切り替えるときに、React がアプリシェルの要素を再マウントすることを回避します。これにより、React が<Links>
コンポーネントから<link rel="stylesheet">
タグを削除して再追加すると、FOUC が発生する可能性があります。
Layout
コンポーネントでの useLoaderData
に関する注意
useLoaderData
は、ハッピーパスルートのレンダリングを目的としており、その型には loader
が正常に実行されて何かを返したという組み込みの前提があるため、ErrorBoundary
コンポーネントで使用することは許可されていません。その前提は、loader
がスローして境界をトリガーした可能性があるため、ErrorBoundary
では当てはまりません。ErrorBoundary
でローダーデータにアクセスするには、ローダーデータが undefined
になる可能性を考慮した useRouteLoaderData
を使用できます。
Layout
コンポーネントは成功フローとエラーフローの両方で使用されるため、この同じ制限が適用されます。成功したリクエストかどうかによって Layout
のロジックを分岐する必要がある場合は、useRouteLoaderData("root")
と useRouteError()
を使用できます。
<Layout>
コンポーネントは ErrorBoundary
のレンダリングに使用されるため、レンダリングエラーが発生することなく ErrorBoundary
をレンダリングできるように、非常に防御的 である必要があります。Layout
が境界をレンダリングしようとして別のエラーをスローした場合、それを使用することはできず、UI は非常に最小限の組み込みのデフォルト ErrorBoundary
にフォールバックします。
以下も参照してください。