当前位置:   article > 正文

react 登陆页面_Vue 转React开发过程 (路由拦截)

const { routerconfig, location }: mytype = this.props;

相比于vue的路由 react的路由就没有那么好用了

基本上需要登录的项目都需要做路由拦截功能

下面一起来看看react中是怎么实现路由拦截的

APP.js

  1. import React from "react";
  2. import {BrowserRouter as Router, Switch} from 'react-router-dom';
  3. import "./App.css";
  4. // 路由部分 自行拆文件去
  5. import FrontendAuth from './router/FrontendAuth'
  6. import Home from './home/index'
  7. import Login from "./login/index";
  8. import NotFund from "./notFund"
  9. const routes = [
  10. { path: '/', meta: { title: '首页' }, component: Home, auth: true },
  11. { path: '/login', meta: { title: '登录' }, component: Login, auth: false },
  12. { path: '/app', meta: { title: '首页' }, component: Home, auth: true },
  13. { path: '/404', meta: { title: '404' }, component: NotFund }
  14. ]
  15. // 路由部分结束
  16. class App extends React.Component {
  17. render() {
  18. return (
  19. <Router>
  20. <Switch>
  21. <FrontendAuth routerConfig={routes}></FrontendAuth>
  22. </Switch>
  23. </Router>
  24. );
  25. }
  26. }
  27. export default App;

相比于之前 我们封装了一个FrontendAuth组件

FrontendAuth.js

  1. import React from 'react'
  2. import { Route, Redirect } from "react-router-dom";
  3. export default class FrontendAuth extends React.Component {
  4. constructor (props) {
  5. super (props)
  6. }
  7. render () {
  8. const { routerConfig, location } = this.props
  9. const { pathname } = location
  10. const isLogin = sessionStorage.getItem('username')
  11. console.log(routerConfig, pathname)
  12. const currentPath = routerConfig.find(item => item.path === pathname)
  13. if (currentPath && !currentPath.auth && !isLogin) {
  14. return (<Route exact path={pathname} component={currentPath.component}></Route>)
  15. }
  16. if (isLogin) {
  17. if (pathname === '/login') {
  18. // 如果是登陆状态,想要跳转到登陆,重定向到主页
  19. return (<Redirect to="/app"></Redirect>)
  20. } else {
  21. if (currentPath) {
  22. // 如果路由合法,就跳转到相应的路由
  23. return (<Route exact path={pathname} component={currentPath.component}></Route>)
  24. } else {
  25. // 如果路由不合法,重定向到 404 页面
  26. return(<Redirect to="/404"/>)
  27. }
  28. }
  29. } else {
  30. // 非登陆状态下,当路由合法时且需要权限校验时,跳转到登陆页面,要求登陆
  31. if (currentPath && currentPath.auth) {
  32. return <Redirect to="/login" />;
  33. } else {
  34. // 非登陆状态下,路由不合法时,重定向至 404
  35. return <Redirect to="/404" />;
  36. }
  37. }
  38. }
  39. }

这样一个简单的路由拦截功能就实现啦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/513651
推荐阅读
相关标签
  

闽ICP备14008679号