非组件环境下拿到路由跳转信息

在非组件环境中,由于无法直接使用useHistory进行页面跳转,本文介绍了如何在React中通过自定义history对象来实现路由跳转。主要方法包括:1. 使用`window.location.href`直接赋值,但会导致页面刷新;2. 封装一个history工具,导出并设置为Router的history。具体实现包括创建`utils/history.js`文件,导入并设置到App.js的Router中,然后在其他非组件文件如`src/utils/request.js`中使用这个history对象的push方法。通过这种方式,可以在清除token后无跳转地进入login页面。
摘要由CSDN通过智能技术生成

背景: 需要在非组件环境跳转到指定页面, 言外之意也就是不能使用useHistory了.

react-router-dom中直接有Router这个包,但是这个Router 没有history属性.而有history属性的其他两个为HashRouter和BrowserRouter.这两个也不是凭空就有的history属性.如图

所以我们需要自己来封装一个包含history信息的utils来帮助我们实现.

安装react-router-dom时,默认会安装history包,我们可以通过这个包来自己创建history对象

为了能够在非组件环境下拿到路由信息,需要我们自定义 Router 的 history

// App.js部分代码

import { Router, Route, Switch, Redirect } from 'react-router-dom'

import { createBrowserHistory } from 'history'
export const history = createBrowserHistory()
function App () {
  return (
    <Router history={history}>

解决方案有二:

        一、用window.location.href直接赋值(暴力解决)

                有副作用,就是会导致页面刷新

        二、封装一个history工具来拿到路由跳转信息,再传给需要该信息的组件

  1.  创建 utils/history.js 文件

    <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 React 类组件,可以使用路由库(如 react-router-dom)来实现路由跳转。以下是一种常见的方法: 1. 首先,确保你已经安装并配置了路由库,比如 react-router-dom。 2. 在你的路由配置使用 `<Route>` 组件指定路径和要渲染的组件。 3. 在类组件,可以通过 `this.props.history.push()` 方法来进行路由跳转。例如: ```jsx import React from 'react'; class Home extends React.Component { handleButtonClick = () => { // 跳转到另一个路径 this.props.history.push('/detail'); }; render() { return ( <div> <h1>Home Page</h1> <button onClick={this.handleButtonClick}>Go to Detail</button> </div> ); } } export default Home; ``` 在上面的例子,当点击按钮时,会调用 `handleButtonClick` 方法,并使用 `this.props.history.push('/detail')` 进行路由跳转到 "/detail" 路径。 4. 在路由组件,可以通过 `<Link>` 组件来实现路由跳转。例如: ```jsx import React from 'react'; import { Link } from 'react-router-dom'; class Home extends React.Component { render() { return ( <div> <h1>Home Page</h1> <Link to="/detail">Go to Detail</Link> </div> ); } } export default Home; ``` 在上面的例子使用 `<Link>` 组件将文字 "Go to Detail" 包裹起来,并设置 `to` 属性为目标路径 "/detail",点击文字时会进行路由跳转。 这样,你就可以在 React 类组件实现路由跳转了。根据你的实际需求,可以使用 `this.props.history.push()` 或 `<Link>` 组件来进行跳转。记得在路由组件包裹 `<Router>` 组件,以便在整个应用进行路由管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值