使用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 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
多个checkbox被选中时如何判断是否有自己想要的
Sep 22 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
angular分页指令操作
Jan 09 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
Mar 23 Javascript
JS实现图片点击后出现模态框效果
May 03 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
JavaScript 处理树数据结构的方法示例
Jun 16 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
Jul 18 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 Javascript
Javascript类型判断相关例题及解析
Aug 26 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去除二维数组的重复项方法
2015/11/03 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
php服务器的系统详解
2019/10/12 PHP
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
js图片处理示例代码
2014/05/12 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
Angular的$http与$location
2016/12/26 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
理解python正则表达式
2016/01/15 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
python解析含有重复key的json方法
2019/01/22 Python
flask应用部署到服务器的方法
2019/07/12 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
详解python程序中的多任务
2020/09/16 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
车间主管岗位职责
2013/11/14 职场文书
小学生自我评价范文
2014/01/25 职场文书
售后服务承诺书
2014/03/26 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
超市理货员岗位职责
2014/07/04 职场文书