使用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限制输入字数,并提示剩余字数实现代码
Dec 24 Javascript
js表头排序实现方法
Jan 16 Javascript
jquery中radio checked问题
Mar 16 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
Mar 25 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
Feb 19 Javascript
Bootstrap网格系统详解
Apr 26 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
Aug 18 Javascript
使用JS正则表达式 替换括号,尖括号等
Nov 29 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
Jan 21 Javascript
Vue中的v-cloak使用解读
Mar 27 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
element-ui 中的table的列隐藏问题解决
Aug 24 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 数字左侧自动补0
2008/03/31 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
php中session退出登陆问题
2014/02/27 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
Python2与Python3的区别实例分析
2019/04/11 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
对python中各个response的使用说明
2020/03/28 Python
Python 在函数上添加包装器
2020/07/28 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Python中zipfile压缩包模块的使用
2021/05/14 Python
解析Java中的static关键字
2021/06/14 Java/Android
java设计模式--原型模式详解
2021/07/21 Java/Android