使用react-router4.0实现重定向和404功能的方法


Posted in Javascript onAugust 28, 2017

在开发中,重定向和404这种需求非常常见,使用React-router4.0可以使用Redirect进行重定向

最常用的就是用户登录之后自动跳转主页。

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

class Login extends Component{
 constructor(){
  super();
  this.state = {value: '', logined: false};
  this.handleChange = this.handleChange.bind(this);
  this.toLogin = this.toLogin.bind(this);
 }
 handleChange(event) {
  this.setState({value: event.target.value})
 }

 toLogin(accesstoken) {
  axios.post('yoururl',{accesstoken})
   .then((res) => {
    this.setState({logined: true});
   })
 }

 render() {
  if(this.props.logined) {
   return (
    <Redirect to="/user"/>
   )
  }
  return (
   <div>
     <input type="text" value={this.state.value} onChange={this.handleChange} />
     <a onClick={() => { this.toLogin(this.state.value) }}>登录</a>
   </div>
  )
 }
}

export default Login;

以上这个示例仅仅是将登录的状态作为组件的state使用和维护的,在实际开发中,是否登录的状态应该是全局使用的,因此这时候可能你会需要考虑使用redux等这些数据状态管理库,方便我们做数据的管理。这里需要注意的使用传统的登录方式使用cookie存储无序且复杂的sessionID之类的来储存用户的信息,使用token的话,返回的可能是用户信息,此时可以考虑使用sessionStorage、localStorage来储存用户信息(包括头像、用户名等),此时书写reducer时需要指定初始状态从存储中获取,如:

const LOGIN_SUCCESS = 'LOGIN_SUCCESS';
const LOGIN_FAILED = 'LOGIN_FAILED';
const LOGINOUT = 'LOGINOUT';

const Login = function(state, action) {
 if(!state) {
  console.log('state');
  if(sessionStorage.getItem('usermsg')) {
   return {
    logined: true,
    usermsg: JSON.parse(sessionStorage.getItem('usermsg'))
   }
  }
  return {
   logined: false,
   usermsg: {}
  }
 }
 switch(action.type) {
  case LOGIN_SUCCESS:
   return {logined: true,usermsg: action.usermsg};
  case LOGIN_FAILED:
   return {logined: false,usermsg:{}};
  case LOGINOUT:
   return {logined: false, usermsg: {}};
  default:
   return state
 }
};

export default Login;

指定404页面也非常简单,只需要在路由系统最后使用Route指定404页面的component即可

<Switch>
 <Route path="/" exact component={Home}/>
 <Route path="/user" component={User}/>
 <Route component={NoMatch}/>
</Switch>

当路由指定的所有路径没有匹配时,就会加载这个NoMatch组件,也就是404页面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
javascript学习笔记(一) 在html中使用javascript
Jun 18 Javascript
理解jQuery stop()方法
Nov 21 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
Dec 24 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
JS设置CSS样式的方式汇总
Jan 21 Javascript
Vue2组件tree实现无限级树形菜单
Mar 29 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
vue.js路由跳转详解
Aug 28 #Javascript
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 #jQuery
解决IE7中使用jQuery动态操作name问题
Aug 28 #jQuery
BootStrap入门学习第一篇
Aug 28 #Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
Aug 28 #Javascript
js制作简单的音乐播放器的示例代码
Aug 28 #Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 #Javascript
You might like
第十一节--重载
2006/11/16 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP循环结构实例讲解
2014/02/10 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
js生成验证码并直接在前端判断
2015/05/15 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
Openlayers实现测量功能
2020/09/25 Javascript
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
python实现电脑自动关机
2018/06/20 Python
Python对象转换为json的方法步骤
2019/04/25 Python
深入了解Python在HDA中的应用
2019/09/05 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
Python接口测试get请求过程详解
2020/02/28 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
行政执法作风整顿剖析材料
2014/10/11 职场文书
房屋租赁协议书
2014/10/18 职场文书
五年级下册复习计划
2015/01/19 职场文书
趣味运动会简讯
2015/07/20 职场文书
JavaScript实现队列结构过程
2021/12/06 Javascript