React Router v6: すべてのパスで「*」文字を正しくキャプチャできない問題の解決策
<p>我有以下两个文件</p>
<p><strong>AppRoutes.tsx</strong></p>
<pre class="brush:php;toolbar:false;">import { Route, Routes } from "react-router-dom";
"../pages/NotFound" から NotFound をインポートします。
"../features/messages/routes/MessageRoutes" から MessageRoutes をインポートします。
「../pages/Home」からホームをインポートします。
デフォルト関数 AppRoutes() をエクスポート {
戻る (
<ルート>
<ルートパス="/" 要素={<ホーム />} />
<ルートパス="/messages/*" 要素={<MessageRoutes />} />
<ルートパス="*" 要素={<NotFound />} />
</ルート>
);
}</pre>
<p><strong>MessageRoutes.tsx</strong></p>
<pre class="brush:php;toolbar:false;">import { Route, Routes } from "react-router-dom";
「../../../routes/ProtectedRoutes」から ProtectedRoutes をインポートします。
"../pages/MessageOverview" から MessageOverview をインポートします。
"../pages/NewMessage" から NewMessage をインポートします。
デフォルト関数 MessageRoutes() をエクスポート {
戻る (
<ルート>
<ルート要素={<ProtectedRoutes />}>
<ルートパス="/" 要素={<MessageOverview />} />
<ルートパス="/new" element={<NewMessage />} />
</ルート>
</ルート>
);
}</pre>
<p>経路 "/messages/*" を使用して /messages で始まるすべての経路を捕捉しているため、これらの嵌合経路は MessageRoutes コンポーネントで処理されます。ただし、経路が「/messages/loremipsum」の場合、「/messages」以降のすべてのコンテンツが MessageRoutes アセンブリによって処理されるため、React ルーターは NotFound ルートを捕捉できません。
<p>これが、すべての適合ファイルのルート構成要素に含まれることを意味するかどうか、私は在都で最後の <code><route path="*" element="{<NotFound" =""> を再度追加する必要があります;} />、最終的なすべてのルートの捕捉をサポートするため、このような方法は好ましくありません。