使用 react-router v4.0 实现重定向和 404 功能

发布于 2022-07-13 09:59:13 字数 2411 浏览 153 评论 0

在使用 react 开发中,重定向和 404 这种需求非常常见,使用 React-router v4.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 页面

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

花开柳相依

文章 0 评论 0

zyhello

文章 0 评论 0

故友

文章 0 评论 0

对风讲故事

文章 0 评论 0

Oo萌小芽oO

文章 0 评论 0

梦明

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文