🐥
React Router v7での<Outlet />の使い方
はじめに
※備忘録です
<Outlet />とはReact Routerで親コンポーネントにマッチする子コンポーネントを表示するためのものです。
コンテンツの一部(親)を変えずに一部のみ(子)を変更したいときに使います。
使い方
v6以前と基本的には変わらないようでしたが、ルートの部分の書き方は変わっているようでした
element: に親のルーターを入れ、childrenに子を書きます。
routeはわかりやすいように全て{プロジェクト名}/src/routerに入れています(下記のコードでは相対パスになっています)。
App.tsx
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Parent from "./router/Top";
import Main from "./router/Main";
import Sub1 from "./router/Sub1";
import Sub2 from "./router/Sub2";
function App() {
const router = createBrowserRouter([
{
element: <Parent />,
children: [
{ path: "/", element: <Main /> },
{ path: "/sub1", element: <Sub1 /> },
{ path: "/sub2", element: <Sub2 /> },
],
},
]);
return (
<RouterProvider router={router} />
);
}
export default App;
Parent.tsx
import { Link, Outlet } from "react-router-dom";
function Parent() {
return (
<>
<p>Parent</p>
<Link to="/">Main</Link>
<br />
<Link to="/sub1">Sub1</Link>
<br />
<Link to="/sub2">Sub2</Link>
<br />
<Outlet />
</>
);
}
export default Parent;
Main.tsx
function Main() {
return (
<>
<p>Main</p>
</>
);
}
export default Main;
Sub1.tsx
function Sub1() {
return (
<>
<p>Sub1</p>
</>
);
}
export default Sub1;
Sub2.tsx
function Sub2() {
return (
<>
<p>Sub2</p>
</>
);
}
export default Sub2;
それぞれLinkを押すとChildren部分のみが遷移します。
おわりに
間違っていたら教えてください。
参考
Discussion