166 文字
1 分

React Router v6でパスパラメータが変更されたら再レンダリングしたい

パスパラメータの変更は再レンダリングをトリガーしない。 そのため、非制御の input 要素などの値はリセットされない。

特定のページでのみパスパラメータの変更で再レンダリングをトリガーするには key を使えば良い。

const SomePage = () => {
const { someId } = useParams();
return <div key={someId}>{/** */}</div>;
};

全てのページでパスパラメータが変更される度に切り替えたければ、次のように Outlet に key を設定すればいい。

export default function App() {
return (
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="about/:id" element={<About />} />
<Route path="*" element={<NoMatch />} />
</Route>
</Routes>
);
}
function Layout() {
const params = useParams();
return (
<div>
<Link to="/about/001">A001</Link>
<Link to="/about/002">A002</Link>
<Outlet key={JSON.stringify(params)} />
</div>
);
}
React Router v6でパスパラメータが変更されたら再レンダリングしたい
https://blog.ohirunewani.com/posts/react-router-v6-trigger-re-render-when-path-params-change/
作者
hrdtbs
公開日
2023-01-14
ライセンス
CC BY-NC-SA 4.0