書くこと
Remix
は命名規則に乗っ取る事で柔軟にRoute
定義できますが、その分複雑なのでキャッチアップが難しく感じる場面もあります。
この記事では以下のポイントに絞り解説する事で、命名規則、各ファイルの役割、定義されるルーティングの一部を理解していきます。
-
.
で連結する事でネストするURLを表現する - パスパラメーターの指定は
$
フレフィックスで定義する -
{リソース名}.tsx
と{リソース名}._index.tsx
を両方配置することによりレイアウトファイルとリソースのRoute
ファイルを分離することができる -
Routes
の命名規則に従でフォルダを作成し配下にroute.tsx
またはindex.tsx
を持つことでRoute
定義をフォルダで行うことができる
1. .
で連結する事でネストするURLを表現する
URL/pets/family
にマッチさせるRoute
を定義する場合はapp/routes/pets.family.tsx
というファイルを作成します
app/routes/
└── pets.family.tsx
2. パスパラメーターの指定は$
フレフィックスで定義する
URL/pets/123
にマッチさせるRoute
を定義する場合はapp/routes/pets.$id.tsx
というファイルを作成します
app/routes/
└── pets.$id.tsx
3. {リソース名}.tsx
と{リソース名}._index.tsx
を両方配置することによりレイアウトファイルとリソースのRoute
ファイルを分離することができる
app/
├── routes/
│ ├── pets._index.tsx
│ ├── pets.$id.tsx
│ └── pets.tsx
└── root.tsx
上記のファイル構成の場合はルーティングは次のようになります。
- URL
/pets
にアクセスするとpets._index.tsx
が描画される - URL
/pets/123
にアクセスするとpets.$id.tsx
が描画される -
pets.tsx
はpets._index.tsx
とpets.$id.tsx
両方のレイアウトファイルになる
pets.tsx
が存在しない場合はpets._index.tsx
とpets.$id.tsx
にはルートのレイアウトファイルであるroot.tsx
が適応されます
4. Routes
の命名規則に従でフォルダを作成し配下にroute.tsx
またはindex.tsx
を持つことでRoute
定義をフォルダで行うことができる
以下のようにpets.$id
とpets._index2つのディレクトリを作成し、それぞれのディレクトリの配下に
index.tsxを配置することで、ディレクトリの名称で
Route`定義が可能です。
これにより、pets._index
ディレクトリの中でのみ使用するpet-create-form.tsx
をindex.tsx
と同じディレクトリに配置し管理するコンポーネントのコロケーションを実現します。
app/routes/
├── pets.$id
│ ├── index.tsx
│ └── pet.tsx
├── pets._index
│ ├── index.tsx
│ ├── pet-create-form.tsx
│ └── pets-table.tsx
└── pets.tsx
Routes
をディレクトリで管理する方法は、リファレンスのScaling
セクションでも推奨されています
まとめ
これらを踏まえると、以下のファイル構成を例にそれぞれのファイルの役割が把握できると思います。
app/routes/
├── pets.$id // `/pets/123`にマッチ
│ ├── index.tsx // `/pets/123`の`route`ファイル
│ └── pet.tsx // `index.tsx`から使用されるコンポーネント
├── pets._index // `/pets`にマッチ
│ ├── index.tsx // `/pets`の`route`ファイル
│ ├── pet-create-form.tsx // `index.tsx`から使用されるコンポーネント
│ └── pets-table.tsx // `index.tsx`から使用されるコンポーネント
└── pets.tsx // `pets.$id`と`pets._index`のレイアウトファイル
リファレンス
他にも命名規則によるルーティングの定義方法がたくさんあります
バージョン
remix -v
2.9.1