使用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 相关文章推荐
js onclick事件传参讲解
Nov 06 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
深入浅析Extjs中store分组功能的使用方法
Apr 20 Javascript
省市联动效果的简单实现代码(推荐)
Jun 06 Javascript
jQuery表单事件实例代码分享
Aug 18 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
Oct 16 Javascript
vue2.0学习之axios的封装与vuex介绍
May 28 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
javascript实现点击星星小游戏
Dec 24 Javascript
序列化模块json代码实例详解
Mar 03 Javascript
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
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/10/09 Javascript
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python标准日志模块logging的使用方法
2013/11/01 Python
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
python之PyMongo使用总结
2017/05/26 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python GUI编程完整示例
2019/04/04 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
会计实习生工作总结的自我评价
2013/10/07 职场文书
演讲比赛策划方案
2014/06/11 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
六查六看心得体会
2014/10/14 职场文书
2014年干部培训工作总结
2014/12/17 职场文书