React 中如何在非组件的函数中使用history的hooks函数

1.最近看视频学习react时遇到的这样一个问题。针对登陆的token失效时,刷新页面。肯定是要跳转到登陆页面让用户重新登陆的,但是React中和Vue不同,跳转依赖于router的hooks函数useHistory.但是在组件中才可以使用history,push()进行跳转,在函数中直接是使用不了的。于是看到这样的解决办法

<1> 在utils下面新建一个history.js文件

import { createBrowserHistory } from "history";  // 这里的createBrowserHistory就是App.js中直接使用的BrowserHistory
const history = createBrowserHistory()
export { history }

<2> 在App.js中引入history

// 注意:此处,需要导入 Router 组件
import { Router } from 'react-router-dom'
import { history } from '@/utils'

function App() {
  return (
    <Router history={history}></Router>
  )
}

<3> 在request.js拦截器中

import {history} from "@/utils/history"  // 引入定义的history

instance.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response;
},
  function (error) {
    // 对响应错误做点什么
    if (!error.response) {
      message.error("网络错误,请重新连接后再试", 1)
      return Promise.reject(error);
    }
    if (error.response.status === 401) {
      message.error("登陆信息过期,请重新登陆", 1)
      //清除token
      store.dispatch(lougout());
      // 跳转到登陆页
      history.push('/login'); 
    };
  });

然后就可以使用了,具体原理是react的router路由是有三个rouuter,BrowserHistory,hashHistory。…好吧其实我也没懂😢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值