zoukankan      html  css  js  c++  java
  • 路由守卫

    • 新建路由页面RouterPage.js
    import React, { Component } from 'react';
    import {BrowserRouter, Link, Route, Switch} from 'react-router-dom';
    import HomePage from './HomePage';
    import UserPage from './UserPage';
    import LoginPage from './LoginPage';
    import SearchPage from './SearchPage';
    import PrivateRoutePage from './PrivateRoutePage';
    
    export default class RouterPage extends Component {
      render() {
        const id = Math.random();
        return (
          <div>
            <h1>RouterPage</h1>
            <BrowserRouter>
              <Link to="/">首页</Link>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              <Link to="/user">用户中心 </Link>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              {/* <Link to="/login">LoginPage </Link>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */}
              <Link to={`/search/${id}`}>搜索页面 </Link>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              <Link to="/a">404 </Link>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    
              <Switch>
                {/* 渲染优先级:children > component > render */}
                {/* <Route exact component={HomePage} path="/" /> */}
                {/* 路由守卫 */}
                <PrivateRoutePage exact component={HomePage} path="/" />
                <PrivateRoutePage component={UserPage} path="/user" />
                <Route component={LoginPage} path="/login" />
                <PrivateRoutePage component={SearchPage} path="/search/:id" />
                <Route component={() => (<h1>404</h1>)} />
              </Switch>
            </BrowserRouter>
          </div>
        )
      }
    }
    • 路由守卫页面逻辑
      • 登录信息存储在store中
      • 没有登录时,重定向页面,并且存储当前页面path, 在state中
      • import React, { Component } from 'react'
        import {Route, Redirect} from 'react-router-dom'
        import {connect} from 'react-redux';
        
        @connect(
          state => state.user,
        )
        class PrivateRoutePage extends Component {
          render() {
            const {path, component, isLogin} = this.props;
            console.log('&&&&&&&&&&', this.props);
            
            if(isLogin) {
              return <Route  component={component} />
            } else {
              return (
                <Redirect
                  to={{
                    pathname: '/login',
                    state: {redirect: path}
                  }}
                />
              )
            }
          }
        }
        
        export default PrivateRoutePage
    • 登录页面逻辑
      • 没有登录,显示登录页面信息
      • 登录了,页面重定向之前的页面
      • import React, { Component } from 'react'
        import {Button} from 'antd'
        import {connect} from 'react-redux'
        import { Redirect } from 'react-router-dom';
        
        @connect(
          // mapStateToProps
          state => state.user,
          // mapDispatchToProps
          {
            login: () => ({type: "loginSuccess"})
          }
        )
        
        class LoginPage extends Component {
          // 登录
          handleLogin = () => {
            this.props.login();
          }
          render() {
            const {location, isLogin} = this.props;
            console.log('props====', this.props);
            const {redirect = '/'} = location.state;
            if (isLogin) {
              return (<Redirect
                to={redirect} 
              />)
            } else {
              return (
                <div>
                  <h1>LoginPage</h1>
                  {
                    !isLogin && (
                      <Button type="primary" onClick={this.handleLogin}>登录</Button>
                    )
                  }
                </div>
              )
            }
          }
        }
        
        export default LoginPage
    你对生活笑,生活不会对你哭。
  • 相关阅读:
    微信小程序开发学习--页面事件和数据绑定
    检测小程序版本更新提示
    vue-cli脚手架
    链表中倒数第K个结点
    调整数组顺序使奇数位于偶数前面
    数值的整数次方(十二)
    二进制中1的个数(十一)
    覆盖矩形(十)
    变态跳台阶(九)
    跳台阶(八)
  • 原文地址:https://www.cnblogs.com/adanxiaobo/p/13226306.html
Copyright © 2011-2022 走看看