PrivateRoute没有在reactjs react-router-dom中工作

Pro*_*fer 12 javascript reactjs react-router react-router-dom

PrivateRoute在我的react.js项目中集成HOC时,我完全陷入困境.

这是我的路线文件

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);
Run Code Online (Sandbox Code Playgroud)

我完全打破了我的头脑,但没有摆脱这个问题.为什么我的控制台里面PrivateRoute没有显示值

react和react-router-dom版本是否存在任何问题

先感谢您!!!

Shu*_*tri 6

PrivateRoute您拥有的组件是正确的,但您只需重新订购Routes它们即可正常工作./AdminManagement路由应该在/Switch 之前呈现第一个匹配的Route并且a Route path也匹配其前缀路径之前

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);
Run Code Online (Sandbox Code Playgroud)

工作演示