使用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 相关文章推荐
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
javascript中的变量作用域以及变量提升详细介绍
Oct 24 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
在JS中如何调用JSP中的变量
Jan 22 Javascript
javascript实现类似百度分享功能的方法
Jul 27 Javascript
JS获取及验证开始结束日期的方法
Aug 20 Javascript
Express的HTTP重定向到HTTPS的方法
Jun 06 Javascript
使用JS监听键盘按下事件(keydown event)
Nov 07 Javascript
js实现纯前端压缩图片
Nov 16 Javascript
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 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
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
jquery 笔记 事件
2011/11/02 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
js编写选项卡效果
2017/05/23 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
vue中activated的用法
2021/01/03 Vue.js
python实现闹钟定时播放音乐功能
2018/01/25 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
领导干部作风建设总结
2014/10/23 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript