我正在做一个课程,在那里使用了react-router-dom的第5版,对react-router-dom做了一些非常重要的更改.

启动应用程序时,浏览器中会出现一个白色页面,使用devtools我会收到一条错误消息:Uncaught Error: A 100 is only ever to be used as the child of 101 element, never rendered directly. Please wrap your Route in a Routes.

在我决定写这篇文章之前,我浏览了各种论坛,了解如何解决这个错误,主要有以下两种解决方案:

  1. react-router-dom的版本更改为旧版本(我不想使用这种方法,我想解决这个问题)
  2. 正如错误消息所建议的那样,将Route封装在Routes中.这就是我所做的.但它不起作用.

应用程序.js公司

import "./App.css";
import Dashboard from "./components/Dashboard";
import Header from "./components/Layout/Header";
import "bootstrap/dist/css/bootstrap.min.css";
import { BrowserRouter as Routes, Router, Route } from "react-router-dom";
import AddProject from "./components/Project/AddProject";
import { Component } from "react";

class App extends Component {
  render() {
    return (
      <Router>
        <div className="App">
          <Header />
          <Routes>
            <Route exact path="/dashboard" component={Dashboard} />
            <Route exact path="/addProject" component={AddProject} />
          </Routes>
        </div>
      </Router>
    );
  }
}

export default App;

我更改了导入,在其中添加了Routes.我把Route包成了Routes.但它总是会出现同样的错误.

我不知道我是否应该删除Router,但如果我这样做,它会收到错误:Uncaught TypeError: Cannot read properties of undefined (reading 'pathname')

推荐答案

您将BrowserRouter导入为Routes,然后导入低级别Router.您仍然缺少包裹路由的真正Routes组件.

修复导入,然后修复路由API/语法.

例子:

import {
  BrowserRouter as Router, // <-- this is the router
  Routes,                  // <-- this is the Routes
  Route
} from "react-router-dom";
import AddProject from "./components/Project/AddProject";
import { Component } from "react";

class App extends Component {
  render() {
    return (
      <Router>
        <div className="App">
          <Header />
          <Routes>
            <Route
              path="/dashboard"
              element={<Dashboard />}  // <-- element prop takes ReactNode/JSX
            />
            <Route
              path="/addProject"
              element={<AddProject />} // <-- element prop takes ReactNode/JSX
            />
          </Routes>
        </div>
      </Router>
    );
  }
}

您还可以查看Upgrading from v5迁移/升级指南,了解从RRDv5到RRDv6的其他突破性更改.

Javascript相关问答推荐

react 页面更改类别时如何返回第0页

我可以后增量超过1(最好是内联)吗?

在JavaScript中,如何将请求的回调函数的结果合并到运行的代码中?

禁用从vue.js 2中的循环创建的表的最后td的按钮

zoom svg以适应圆

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

如何在Obsidian dataview中创建进度条

如何让npx在windows中运行js脚本?

在使用HighChats时如何避免Datatables重新初始化错误?

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

使用ThreeJ渲染的形状具有抖动/模糊的边缘

JQuery Click事件不适用于动态创建的按钮

如何在Angular拖放组件中同步数组?

邮箱密码重置链接不适用于已部署的React应用程序

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

无法重定向到Next.js中的动态URL

处理TypeScrip Vue组件未初始化的react 对象

MongoDB通过数字或字符串过滤列表

bootstrap S JS赢得了REACT中的函数/加载

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?