使用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 相关文章推荐
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
jQuery 获取对象 基本选择与层级
May 31 Javascript
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
Jun 14 Javascript
获取JavaScript异步函数的返回值
Dec 21 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
解决Vue+Element ui开发中碰到的IE问题
Sep 03 Javascript
解决vue跨域axios异步通信问题
Apr 17 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
php错误级别的设置方法
2013/06/17 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
Python装饰器基础详解
2016/03/09 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
中文专业毕业生自荐书范文
2014/01/04 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
甜品店创业计划书
2014/09/21 职场文书
新郎答谢词
2015/01/04 职场文书
2015年物业管理工作总结
2015/04/23 职场文书