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