当前位置: 首页 > 知识库问答 >
问题:

在reactjs react-router-dom中不工作

琴修为
2023-03-14

我完全卡住时集成私人路由HOC在我的react.js项目。

这是我的路线文件

import React, { Component } from "react";
import { Route, Redirect, Switch, BrowserRouter as Router } from 'react-router-dom';
import Dashboard from "../view/Dashboard/Dashboard";
import Login from "../view/Login/Login";
import Admin from "../view/UserManagement/Admin";
import cookie from 'react-cookies'

const PrivateRoute = ({ component, ...rest }) => {
  const isAuthed = cookie.load('token')
  console.log(isAuthed, 'dddddddddddddddddddd')
  return (
    <Route {...rest} exact
      render = {(props) => (
        isAuthed ? (
          <div>
            {React.createElement(component, props)}
          </div>
        ) :
        (
          <Redirect
            to={{
              pathname: '/login',
              state: { from: props.location }
            }}
          />
        )
      )}
    />
  )
}

class MainPanel extends Component {

  render() {
    return (
      <div style={{ direction: direction }}> 
        <Router>
          <Switch>
            <Route path="/login" component={Login}/>
            <PrivateRoute path="/" component={Dashboard} />
            <PrivateRoute path="/AdminManagement" component={Admin} />
           </Switch>
        </Router>
      </div>
    )
  }
}
export default withNamespaces('common') (MainPanel);

我对此完全崩溃了,但没有摆脱那个问题。为什么我的控制台中的私人路线不显示值

有任何问题与反应和反应路由器的版本

提前谢谢你!!!

共有3个答案

长孙泉
2023-03-14

尝试将库更改为react cookie

let PrivateRoute = ({ component: Component, cookies, ...rest }) => (
  <Route
    {...rest}
    render={props =>
      cookies.get("name") ? (
        <Component {...props} />
      ) : (
        <Redirect
          to={{
            pathname: "/login",
            state: { from: props.location }
          }}
        />
      )
    }
  />
);

https://codesandbox.io/s/015k0jl0ql

楚元章
2023-03-14

以下是我如何处理我的私人路线,也许它也会帮助你。我有protected ectedRoutes作为一个数组与路由.你可以适合他们,因为你喜欢。

html lang-html prettyprint-override">const routes = [
  {
    path: '/login', exact: true, name: 'Login', component: Login,
  },
];

const protectedRoutes = [
  {
    path: '/admin', exact: true, name: 'Admin', component: Admin,
  },
];
邢和光
2023-03-14

你有的私人路由组件是正确的,但是你只需要重新排序你的路由,它们才能正常工作。/AdminManagement路由应该在/之前,因为交换机呈现第一个匹配的路由路由路径也将匹配其前缀路径

class MainPanel extends Component {

  render() {
    return (
      <div style={{ direction: direction }}> 
        <Router>
          <Switch>
            <Route path="/login" component={Login}/>
            <PrivateRoute path="/AdminManagement" component={Admin} />
            <PrivateRoute path="/" component={Dashboard} />
           </Switch>
        </Router>
      </div>
    )
  }
}
export default withNamespaces('common') (MainPanel);

工作演示

 类似资料:
  • 关于未解决的问题(作为最终结论) react路由器dom v4中的多个嵌套路由 如何在React路由器v4中嵌套路由 我也有同样的问题。 https://reacttraining.com/react-router/web/guides/quick-start促进react-router-dom 此外,人们发现最好在一个文件中列出路由,而不是在组件内部。 有人提到:https://github.c

  • 问题内容: 我有时看到人们在导出组件时将它们包装起来: 这是做什么用的,什么时候应该使用? 问题答案: 当您在应用程序中包含主页组件时,通常将其包装在这样的组件中: 这样,该组件便可以访问,因此可以使用重定向用户。 某些组件(通常是标头组件)出现在每个页面上,因此没有包装在中: 这意味着标题不能重定向用户。 要解决此问题,可以在导出时将标头组件包装在一个函数中: 这使组件可以访问,这意味着标题现在

  • 我对导航链接有一个小问题。它不应用活动的类名,尽管它在其他方面可以工作(转到所需的路径,呈现所需的组件) react路由器dom版本5.2.0 我的index.js 和my Navigation.js: UPD:路由器工作,在NaVLink的麻烦。我需要添加activeClassName到nav项目,但它没有。 我的App.js: Main.js:

  • 我想在菜单栏文本被选中时更改它的颜色。 这里可能出了什么问题? 我尝试使用伪类':active',但没有得到应用。其中as':Hover'正在工作。 我还尝试使用'Router LinkActive',它应该添加类'Active-Link',但这也不起作用。 我在下面给出了HTML、SCCS和TS代码:

  • https://reacttraining.com/react-router/web/example/auth-workflow 我在react-router-dom文档中实现的Private路由 PrivateRoute是从Redux存储获取身份验证状态的已连接组件。 我正在尝试使用redux模拟存储和mount from Ezyme测试连接的组件。 即使状态中的身份验证为真,传递给私人路由的组

  • 看这段视频,react路由器似乎很容易使用,但我找不到如何在我的代码中导航,因为我想在单击div时链接,而不是使用