我不知道为什么我得到这个错误,我在任何地方都找不到答案。我已经卸载了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;

当前回答

在react-router-dom v6中,开关被路由替换。下面是配置react-router-dom v6的简单示例。

import * as React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';

import Layout from './components/Layout';
import ProtectedRoute from './components/ProtectedRoute';
import LoginPage from './pages/LoginPage';
import WizardPage from './pages/WizardPage';
import RequestsPage from './pages/RequestsPage';

import './App.scss'

export class App extends React.Component {
    public render() {
        const sharedRouteProps = { exact: true, authenticationPath: '/login' };
        const wizardRouteProps = { ...sharedRouteProps, path: "/", component: WizardPage };
        const requestsRouteProps = { ...sharedRouteProps, path: "/requests", component: RequestsPage };

        return (
            <Layout>
              <Router>
                <Switch>
                    <Route exact path='/login' component={LoginPage} />
                    <ProtectedRoute {...wizardRouteProps} />
                    <ProtectedRoute {...requestsRouteProps} />
                </Switch>
              </Router>
            </Layout>
        );
    }
}

其他回答

如果你正在使用react-router-dom v6,看起来Switch已经被Routes取代了。

如果你正在使用一个更新版本的react-router-dom(例如,在我的例子中是^6.2.1),你应该将<Switch>更改为<Routes>,并使用<Route>和component={<SampleComponent />}参数。

特别是下面的代码示例:

import { BrowserRouter as Router, Routes, Route} from 'react-router-dom';
import MyComponent from './containers/MyComponent';

export default function AppRoutes() {
    return (
        <Routes>
            <Route exact path="/" component={<MyComponent />}>
            </Route>
        </Routes>
    );
}

在react-router-dom v6中,Switch被替换为路由。

还有组件和元素

{componentName}和{}

如果你安装了react-router和react-router-dom v6 beta,就像这样卸载:

npm uninstall --save react-router react-router-dom

然后用这个安装:

npm install --save react-router react-router-dom

它将安装非beta版的最新版本。

然后我们只需要重新启动Visual Studio Code或任何你处理它的文本编辑器。

一个解决方案:

删除“node_modules”文件夹。在包装里。Json文件,更改react-router-dom版本(在我的情况下版本6)为“react-router-dom”:“^5.2.1”

然后在终端运行:

NPM install用于安装依赖项,然后运行 NPM开始重新启动