reactjs 使用不存在的URL为嵌套路由配置重定向

eqoofvh9  于 2023-03-17  发布在  React
关注(0)|答案(1)|浏览(141)

我已设置路由器。它们都包含在一个父根中,该父根的组件包含Outlet组件(<ComponentWithOutlet />)。在子路由中,还有一个子路由具有自己的子路由(<Route path="foo" />)。所有路由器都工作正常。

const RootRouter: FC = () => {
  return (
    <BrowserRouter basename="/">
      <Routes>
        <Route path="/" element={<ComponentWithOutlet />}>
          <Route path="/" element={<SomeComponent />} />
          <Route path="foo">
            <Route path="bar" element={<BarComponent />} />
            <Route path="test" element={<TestComponent />} />
          </Route>
        </Route>
        <Route
          path="*"
          element={<Navigate to="/" />}
        />
      </Routes>
    </BrowserRouter>
  );
};

export default RootRouter;

我想在错误的url上设置正确的重定向。现在,当我导航到丢失的url(例如,/sdfsdf/foo/asdfsadf)时,应用程序会正确地重定向到主页。但当我转到/foo url时,呈现的是<ComponentWithOutlet />,这是错误的。我需要设置重定向到/foo/bar或应用程序根目录。
我尝试将此路由添加到<Route path="foo" />,但不起作用:

<Route path="*" element={<Navigate to="/" />} />

我尝试更改<Route path="foo" />,但也不起作用:

<Route path="foo" element={<Navigate to="/" />}>

我该怎么做呢?

8gsdolmq

8gsdolmq1#

如果你想让一个不匹配的"/foo/*"路径重定向到"/foo/bar",你需要为嵌套的路由呈现另一个重定向。如果你想让"/foo"也呈现BarComponent,你需要一个索引路由,要么呈现BarComponent,要么重定向到"/foo/bar"
示例:

<Routes>
  <Route element={<ComponentWithOutlet />}>
    <Route path="/" element={<SomeComponent />} />
    <Route path="foo">
      <Route path="bar" element={<BarComponent />} />
      <Route path="test" element={<TestComponent />} />
      <Route index element={<Navigate to="bar" replace />} />
      <Route path="*" element={<Navigate to="bar" replace />} />
    </Route>
  </Route>
  <Route path="*" element={<Navigate to="/" replace />} />
</Routes>

相关问题