react-router-dom V6 中的嵌套路由

IT技术 reactjs react-router-dom
2021-05-12 03:27:08

我希望你们一切都好。最近我用react完成了这个项目,并在这里制作了一个示例问题出在路由上。我想在其父级下显示子路由,但不幸的是我没有做到。如果有人可以解释问题或修复代码,我将不胜感激。

应用程序

import "./styles.css";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Login from "./Login";
import Main from "./Main";

export default function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route path="/" element={<Login />} />
          <Route path="/main" element={<Main />}></Route>
        </Routes>
      </Router>
    </div>
  );
}

主要的

import React from "react";
import {
  BrowserRouter as Router,
  Routes,
  Route,
  Outlet,
  Link
} from "react-router-dom";
import Child1 from "./Child1";
import Child2 from "./Child2";

export default function Main() {
  return (
    <div>
      <h1>main page</h1>
      <Link to="/main/child1">child 1</Link>||||
      <Link to="/main/child2">child 2</Link> ||||
      <Link to="/">log out</Link>
      <Outlet />
      <Routes>
        <Route path="/main/child1" element={<Child1 />} />
        <Route path="/main/child1" element={<Child2 />} />
      </Routes>
    </div>
  );
}

孩子 1 & 2

export default function Child1() {
  return <div>Child1</div>;
}
export default function Child2() {
  return <div>Child2</div>;
}

最好的。

1个回答

问题

主要问题是您的根路径匹配器的指定方式与嵌套路径不匹配,因此Main组件被卸载。

解决方案

应用程序

这里的路径Main应该指定一个通配符匹配器以允许子路由的继续匹配,path="/main/*"

export default function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route path="/" element={<Login />} />
          <Route path="/main/*" element={<Main />} /> // <-- allow sub-route matches
        </Routes>
      </Router>
    </div>
  );
}

主要的

请注意,所有链接和路径也已更新为相对链接/路径与绝对链接。

export default function Main() {
  return (
    <div>
      <h1>main page</h1>
      <Link to="child1">child 1</Link> ||||{" "}
      <Link to="child2">child 2</Link> ||||{" "}
      <Link to="/">log out</Link>
      <Outlet />
      <Routes>
        <Route path="child1" element={<Child1 />} />
        <Route path="child2" element={<Child2 />} />
      </Routes>
    </div>
  );
}

编辑nested-routing-in-react-router-dom-v6