使用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验证表单大全
Nov 25 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
JavaScript简单实现网页回到顶部功能
Nov 12 Javascript
Node.js模拟浏览器文件上传示例
Mar 26 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
理解javascript回调函数
Dec 28 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 Javascript
基于jquery.page.js实现分页效果
Jan 01 jQuery
深入浅析Node.js 事件循环、定时器和process.nextTick()
Oct 22 Javascript
vue-cli 3.x配置跨域代理的实现方法
Apr 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
PHP学习笔记之一
2011/01/17 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
PHP fclose函数用法总结
2019/02/15 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
Vue的Options用法说明
2020/08/14 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python中实现精确的浮点数运算详解
2017/11/02 Python
对Python3 序列解包详解
2019/02/16 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
python开发入门——set的使用
2020/09/03 Python
Python实现壁纸下载与轮换
2020/10/19 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
自主实习接收函
2014/01/13 职场文书
优秀幼教自荐信
2014/02/03 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
解除合同协议书范本
2016/03/21 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA