我不知道为什么我得到这个错误,我在任何地方都找不到答案。我已经卸载了react-router-dom包并重新安装了它,但它仍然告诉我交换模块没有从react-router-dom导出。这是我的代码。

我得到的错误是:

试图导入错误:“Switch”没有从“react-router-dom”中导出。

Code

import React from 'react';
import './App.css';
import NavBar from './components/navbar.js';
import Footer from './components/footer.js';
import Home from './components/pages/homepage/home.js';
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <div className="app-container">
        <NavBar />
        <Switch>
          <Route path="/home" component={Home} />
        </Switch>
        <Footer />
      </div>
    </Router>
  );
}

export default App;

当前回答

<Switch>替换为<Routes>

之前:

import { Route, Switch} from 'react-router'

<Router>
    <Switch>
        <Route />
        <Route />
    </Switch>
</Router>

Now:

import { Route, Routes} from 'react-router'

<Router>
    <Routes>
        <Route />
        <Route />
    </Routes>
</Router>

只需使用路由而不是交换机。

其他回答

这实际上不是你或React或你的代码的问题。它只是react-router-dom的更新版本。用路由替换交换机。

就是这样。只要使用路由而不是开关,它工作得很好。

我也有同样的问题。在项目终端上,输入以下命令。您不需要对代码进行任何更改。

卸载NPM react-router-dom NPM安装react-router-dom@5.2.0

第一步:升级到React 16.8+和React -router-dom v5.2:

npm uninstall react-router-dom
npm install react-router-dom@5.2

步骤2:更新react-router-dom导入语句。

修改import {Switch, Route} from "react-router-dom";:

import { Routes, Route } from 'react-router-dom';

第三步:升级语法,把“Switch”换成“Routes”,把“component”换成“element”

改变

<Switch>
    <Route path="/home" component={HomePage} />
</Switch>

to

<Routes>
    <Route path="/home" element={<HomePage/>} />
</Routes>

或者,您也可以按照其他解决方案中的建议降低react-router版本。

但是,我建议升级到react-router-dom及其语法的最新版本,而不是倒退。

你必须先检查npm包的版本。 执行npm info react-router-dom version命令查看。

如果包版本为>= 6.0.0,则必须进行更改

import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";

to

import { BrowserRouter as Router,Routes, Route, Link } from "react-router-dom";

也必须改变

<Route path="/home" component={Home} />

to

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

在react-router-dom v6中,“Switch”被替换为路由“routes”。您需要更新从的导入

import { Switch, Route } from "react-router-dom";

to

import { Routes ,Route } from 'react-router-dom';

您还需要更新Route声明

<Route path="/" component={Home} />

to

<Route path='/' element={<Home/>} />

在react-router-dom中,你也不需要在Route声明中使用exact。

欲了解更多信息,请访问官方文档: 升级到react-router-dom v6