当在终端中运行npm run start时,我得到以下错误。

试图导入错误:'Redirect'没有从'react-router-dom'中导出。

我重新安装了node_modules, react-router-dom, react-router。还重新启动了终端和我的电脑,但问题仍然存在。

我的代码:

import React from 'react';
import { Switch, Redirect } from 'react-router-dom';

import { RouteWithLayout } from './components';
import { Minimal as MinimalLayout } from './layouts';

import {
  Login as LoginView,
  Dashboard as DashboardView,
  NotFound as NotFoundView
} from './views';

const Routes = () => {
  return (
    <Switch>
      <Redirect
        exact
        from="/"
        to="/dashboard"
      />
      <RouteWithLayout
        component={routeProps => <LoginView {...routeProps} data={data} />}
        exact
        layout={MinimalLayout}
        path="/login"
      />
      <Redirect to="/not-found" />
    </Switch>
  );
};

export default Routes;

这是我的包裹。json:进口

"react-router": "^6.0.0-beta.0",
"react-router-dom": "^6.0.0-beta.0",

当前回答

你不能使用Redirect组件,因为它已经从react-router-dom版本6中删除了。

你可以使用react-router-dom 4.2.2版本。只需使用下面的代码来安装它。

npm install --save react-router-dom@4.2.2

or

yarn add react-router-dom@4.2.2

其他回答

重定向已经从v6中删除,但你现在可以这样做:

<Route path="*" element={<Navigate to ="/" />}/>

嗨,我记得有一个钩子叫useHistory,这个钩子仍然存在,这只有一些变化,并被重命名为usenavate。使用这个,并遵循文档中的一个例子,我为我的受保护路由做了这样的返工:

import { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useAuth } from "../../contexts/AuthContext";

function ProtectedRoutes({ component: Component }, props) {
  const [loading, setLoading] = useState(true);

  const { currentUser } = useAuth();
  const navigate = useNavigate();

  useEffect(() => {
    if (currentUser) {
      setLoading(false);
      return;
    }
    navigate("/");
  }, []);

  return <>{loading ? "Loading..." : <Component {...props} />} </>;
}

export default ProtectedRoutes;

在我的Routes中是这样使用的:

import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import AuthFirebaseHelper from "./helpers/AuthFirebaseHelper/AuthFirebaseHelper";
import ProtectedRoutes from "./helpers/ProtectedRoutes/ProtectedRoutes";
import Dashboard from "./components/Dashboard";
import Home from "./components/Home";

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/authentication" element={<AuthFirebaseHelper />}></Route>
        <Route path="/" exact element={<Home />}></Route>
        <Route
          path="/restricted"
          element={<ProtectedRoutes component={Dashboard} />}
        ></Route>
      </Routes>
    </Router>
  );
}

导出默认App;

usenavnavigation的文档

因为它在v6中被删除了,所以您可以使用它作为替代。

<Route path="*" element={<NotFound />} />

重定向组件已从react-router版本6中删除,对于react-router-dom v6,只需将重定向替换为导航

import { Navigate } from 'react-router-dom';

<Routes>
<Route path="/login" element={isLogin ? <Navigate to="/" /> : <Login />}/>
</Routes>

对于react-router-dom v6,只需将Redirect替换为Navigate

import { Navigate } from 'react-router-dom';
.
.
.
{ component: () => <Navigate to="/404" /> }