使用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 相关文章推荐
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
Mar 16 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
Apr 22 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
浅析从vue源码看观察者模式
Jan 29 Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
36个正则表达式(开发效率提高80%)
Nov 17 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
非常好的php目录导航文件代码
2006/10/09 PHP
关于php循环跳出的问题
2013/07/01 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
Vue实现简易计算器
2020/02/25 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
南京迈特望C/C++面试题
2012/07/09 面试题
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
军训自我鉴定怎么写
2014/02/13 职场文书
机关保密工作承诺书
2015/05/04 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android