首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:将路由组件封装在路由组件中(版本5和6之间的更改)

错误:将路由组件封装在路由组件中(版本5和6之间的更改)
EN

Stack Overflow用户
提问于 2022-07-01 15:50:20
回答 2查看 124关注 0票数 2

我正在做一个使用react-router-dom版本5的课程,在那里对react-router-dom进行了一些相当重要的更改。

当启动应用程序时,浏览器中会出现一个白色页面,使用devtools我会收到一条错误消息:<Route> Uncaught:只能用作 <Routes> 元素的子元素,从未直接呈现。请用一条路线包裹你的路线。

在我决定写这篇文章之前,我查看了关于如何解决这个错误的各种论坛,主要的两个解决方案如下:

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

App.js

代码语言:javascript
复制
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:无法读取未定义(读取“路径名”)的属性

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-01 16:02:04

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

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

示例:

代码语言:javascript
复制
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>
    );
  }
}

您还可以查看从v5升级迁移/升级指南,以了解从RRDv5到RRDv6的其他突然更改。

票数 0
EN

Stack Overflow用户

发布于 2022-07-01 15:56:56

Route语法也发生了变化。现在它是这样工作的:<Route path="/dashboard" element={<Dashboard/>} />。您可以在文档中查看更多内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72831772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档