reactjs - 如何使用 react 路由器中的链接组件访问嵌套路由中的先前索引路由?

我正在构建一个小型 react 应用程序,并且我已经实现了这样的路线:

import React, { lazy } from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter, Routes, Route } from "react-router-dom";

const App = lazy(() => import("./App"));
const Home = lazy(() => import("./Pages/Home"));
const Registro = lazy(() => import("./Pages/Dashboard"));
const Summary = lazy(() => import("./Pages/Summary"));
const Inventario = lazy(() => import("./Pages/Inventario"));
const Estadisticas = lazy(() => import("./Pages/Estadisticas"));
const Dashboard = lazy(() => import("./Pages/Dashboard"));

ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<App />}>
            <Route index element={<Home />} />
            <Route path="dashboard" element={<Dashboard />}>
              <Route index element={<Summary />} />
              <Route path="estadisticas" element={<Estadisticas />} />
              <Route path="inventario" element={<Inventario />} />
            </Route>
          </Route>
        </Routes>
      </BrowserRouter>
  </React.StrictMode>
);

如您所见,我的仪表板组件中有一些嵌套路由,其中我已将摘要组件设置为默认情况下使用索引 prop 匹配。我的仪表板组件是这样的:

import { Outlet, Link } from "react-router-dom";

export default function Dashboard() {
 
  return (
    <div>
      <nav>
        <ul>
          <li><Link to="/">Summary</Link></li>
          <li><Link to="estadisticas">Estadisticas</Link></li>
          <li><Link to="inventario">Inventario</Link></li>
        </ul>
      </nav>
      <Outlet/>
    </div>
  
  );
}

当我尝试使用导航从 Link to="/" 访问摘要组件时,我的问题出现了,而不是呈现摘要组件,而是呈现主页组件。我也尝试过使用 Link to="dashboard",但 url 最终变成了类似仪表板/仪表板的东西,这不起作用。有什么方法可以通过使用 Link to 访问 Summary 组件?

回答1

问题

问题在于以 "/" 字符开头的路径被认为是绝对路径。这就是为什么“摘要”链接一直链接回 "/" 而不是父路径 "/dashboard"

解决方案

您可以使用 "." 作为父路径的目标,如果用户位于 "/dashboard/estadisticas""/dashboard/inventario" 路径上,则可以使用 "/dashboard"

例子:

function Dashboard() {
  return (
    <div>
      <nav>
        <ul>
          <li>
            <Link to=".">Summary</Link>
          </li>
          <li>
            <Link to="estadisticas">Estadisticas</Link>
          </li>
          <li>
            <Link to="inventario">Inventario</Link>
          </li>
        </ul>
      </nav>
      <Outlet />
    </div>
  );
}

抱歉,目前我无法在官方文档中找到此功能,尽管有关于使用 ".." 来“删除父路径的一部分”的简短说明。 ".." 的作用与 "." 相似。请注意,如果它是 EstadisticasInventario 之一,则将使用 ".." 渲染链接以“上一级”。

相似文章