ルートルート
"ルート" ルート (app/root.tsx
) は、routes/
ディレクトリ内のすべてのルートの親であり、ルート <html>
ドキュメントのレンダリングを担当するため、Remix アプリケーションで唯一 必須 のルートです。
それ以外では、ほとんど他のルートと同じように、標準的なルートのエクスポートをすべてサポートしています。
headers
meta
links
loader
clientLoader
action
clientAction
default
ErrorBoundary
HydrateFallback
handle
shouldRevalidate
ルートルートはドキュメントを管理するため、Remix が提供するいくつかの "ドキュメントレベル" コンポーネントをレンダリングするのに適した場所です。これらのコンポーネントは、ルートルート内で一度使用され、ページを正しくレンダリングするために 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
にフォールバックします。
関連項目: