使用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 相关文章推荐
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
angular简介和其特点介绍
Jan 29 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
javascript如何定义对象数组
Jun 07 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
Aug 17 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
Jan 23 Javascript
浅谈React中组件间抽象
Jan 27 Javascript
细说webpack6 Babel的使用详解
Sep 26 Javascript
JS实现简单tab选项卡切换
Oct 25 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
Nuxt页面级缓存的实现
Mar 09 Javascript
three.js如何实现3D动态文字效果
Mar 03 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中的Base62类(适用于数值转字符串)
2013/08/12 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
php图像验证码生成代码
2017/06/08 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Python3基础之函数用法
2014/08/13 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
简单谈谈python中的多进程
2016/11/06 Python
对python的文件内注释 help注释方法
2018/05/23 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
端午节活动策划方案
2014/03/09 职场文书
气象学专业个人求职信
2014/03/15 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
通知的格式范文
2015/04/27 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python