React Router v7 (ex. Remix)
Installation
npx create-react-router@latest my-react-router-app
Routing
設定
app/routes.ts
に書く。
各ラウトは URL パターンとファイルパス(=Route modules)の組み合わせからなる。
Route modules については詳細後述。
// app/routes.ts
import {
type RouteConfig,
route,
index,
layout,
prefix,
} from '@react-router/dev/routes'
export default [
// indexはパスなし(デフォルト)
index('./home.tsx'),
// routeはパスあり
route('about', './about.tsx'),
// 共通レイアウトを使うラウト。ネストではない。
layout('./auth/layout.tsx', [
route('login', './auth/login.tsx'),
route('register', './auth/register.tsx'),
]),
// 特定のprefixを持つラウト。ネストではない。
...prefix('concerts', [
index('./concerts/home.tsx'),
route(':city', './concerts/city.tsx'),
route('trending', './concerts/trending.tsx'),
]),
] satisfies RouteConfig
v7 ではコンフィグベースがデフォルトになった模様だが、 ファイルベースも設定すれば使えるし、混在も可能。
Nested Routes
ラウトはネスト可能。
export default [
route('dashboard', './dashboard.tsx', [
index('./home.tsx'), // `/dashboard`のときに描写される子ラウト
route('settings', './settings.tsx'), // `/dashboard/settings`のときに描写される子ラウト
]),
] satisfies RouteConfig
子ラウトの描写は<Outlet />
で行う。
import { Outlet } from 'react-router'
export default function Dashboard() {
return (
<div>
<h1>Dashboard</h1>
{/* will either be home.tsx or settings.tsx */}
<Outlet />
</div>
)
}
Root Route
routes.ts
に書いた全てのラウトは、app/root.tsx
という特殊なラウトモジュールの<Outlet />
に描写される。