使用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 06 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
js中利用cookie实现记住密码功能
Aug 20 Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
JS实现留言板功能[楼层效果展示]
Dec 27 Javascript
vue 点击按钮增加一行的方法
Sep 07 Javascript
利用hasOwnProperty给数组去重的面试题分享
Nov 05 Javascript
微信小程序新闻网站详情页实例代码
Jan 10 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文件上传类
2016/08/29 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Javascript中常用的检测方法小结
2016/10/08 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
python每次处理固定个数的字符的方法总结
2013/01/29 Python
python单链表实现代码实例
2013/11/21 Python
python3中int(整型)的使用教程
2017/03/23 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
对Python中的@classmethod用法详解
2018/04/21 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
经典广告词大全
2014/03/14 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
python中的被动信息搜集
2021/04/29 Python
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android