我正在try 创建一个Dashboard,但我被嵌套工艺路由所困.就像我想要在屏幕上显示导航栏、侧边栏和页脚一样,但只有主要组件应该更改.

我在两个文件中使用了路由:App.jsHome.jsx.

App.js:

import React from "react";
import "./App.css";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Login from "./pages/login/Login";
import Registeration from "./pages/registeration/Registeration";
import Home from "./pages/Home/Home";

function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route
            path="/"
            element={
              <React.Fragment>
                <div className="login_page">
                  <Login />
                </div>
              </React.Fragment>
            }
          />
          <Route
            path="registeration"
            element={
              <React.Fragment>
                <div className="login_page">
                  <Registeration />
                </div>
              </React.Fragment>
            }
          />

          <Route path="home" element={<Home />} />
        </Routes>
      </Router>
    </div>
  );
}

export default App;

Home.jsx:Home.jsx:

import React from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Assets from "../../components/assets/Assets";
import Balance from "../../components/balance/Balance";
import Dashboard from "../../components/dashboard/Dashboard";
import { Footer } from "../../components/Footer/Footer";
import Navbar from "../../components/navbar/Navbar";
import OpenAccount from "../../components/openAccount/OpenAccount";
import Sidebar from "../../components/sidebar/Sidebar";
import "./Home.scss";

const Home = () => {
  return (
    <div className="home">
      <Sidebar />
      <div className="homeContainer">
        <Navbar />
        <div>
          <Routes>
            <Route path="/balance" element={<Balance />} />
            <Route path="/" element={<Dashboard />} />
            <Route path="/assets" element={<Assets />} />
            <Route path="/open-account" element={<OpenAccount />} />
          </Routes>
        </div>
        <Footer />
      </div>
    </div>
  );
};

export default Home;

推荐答案

在您当前的实现中,Home组件呈现102个路由,而不是嵌套的路由.为了使后代路由可用来匹配并呈现其路由的内容,父路由必须在其路径上附加尾随的通配符"*"匹配器.

示例:

<Route path="home/*" element={<Home />} />

另请注意,子代路由是相对于其父路由构建的,因此这Home个路由将解析为以下内容:

<Route
  path="/balance"           // <-- "/home/balance"
  element={<Balance />}
/>
<Route
  path="/"                  // <-- "/home"
  element={<Dashboard />}
/>
<Route
  path="/assets"            // <-- "/home/assets"
  element={<Assets />}
/>
<Route
  path="/open-account"      // <-- "/home/open-account"
  element={<OpenAccount />}
/>

您也可以通过将Home分量转换为layout route分量来使用104路由来实现相同的目的.布局路由为其嵌套路由呈现Outlet组件,以将其element内容呈现到其中,而不是直接呈现派生路由.

示例:

import React from "react";
import { Outlet } from "react-router-dom";
import { Footer } from "../../components/Footer/Footer";
import Navbar from "../../components/navbar/Navbar";
import Sidebar from "../../components/sidebar/Sidebar";
import "./Home.scss";

const Home = () => {
  return (
    <div className="home">
      <Sidebar />
      <div className="homeContainer">
        <Navbar />
        <div>
          <Outlet /> // <-- nested routes render content here
        </div>
        <Footer />
      </div>
    </div>
  );
};

export default Home;
import React from "react";
import "./App.css";
import { BrowserRouter as Router, Routes, Route, Outlet } from "react-router-dom";
import Login from "./pages/login/Login";
import Registration from "./pages/registration/Registration";
import Assets from "../../components/assets/Assets";
import Balance from "../../components/balance/Balance";
import Dashboard from "../../components/dashboard/Dashboard";
import OpenAccount from "../../components/openAccount/OpenAccount";
import Home from "./pages/Home/Home";

const LoginLayout = () => (
  <div className="login_page">
    <Outlet />
  </div>
);

function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          <Route element={<LoginLayout />}>
            <Route path="/" element={<Login />} />
            <Route path="registration" element={<Registration />} />
          </Route>
          <Route path="home" element={<Home />}>
            <Route path="balance" element={<Balance />} />
            <Route index element={<Dashboard />} />
            <Route path="assets" element={<Assets />} />
            <Route path="open-account" element={<OpenAccount />} />
          </Route>
        </Routes>
      </Router>
    </div>
  );
}

export default App;

Javascript相关问答推荐

如何保持子画布元素的1:1宽高比?

Next.js Next/Image图像隐含性有任何类型-如何修复?

字节数组通过echo框架传输到JS blob

jQuery提交按钮重新加载页面,即使在WordPress中使用preventDefault()

我应该绑定不影响状态的函数吗?'

闭包是将值复制到内存的另一个位置吗?

扩展类型的联合被解析为基类型

覆盖加载器页面避免对页面上的元素进行操作

使用auth.js保护API路由的Next.JS,FETCH()不起作用

如何在我的Next.js项目中.blob()我的图像文件?

使用插件构建包含chart.js提供程序的Angular 库?

Google脚本数组映射函数横向输出

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

Jexl to LowerCase()和Replace()

将Singleton实例设置为未定义后的Angular 变量引用持久性行为

在没有任何悬停或其他触发的情况下连续交换图像

如何使用Cypress在IFRAME中打字

我们是否可以在reactjs中创建多个同名的路由

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用