React-router v6在Class组件和非组件代码中的正确使用

 更新时间:2024年03月14日 10:06:03   作者:超喜欢你呦  
这篇文章主要介绍了React-router v6在Class组件和非组件代码中的正确使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

最近内部正在开发的 react 项目 react-router 全线升级到了 v6 版本

v6 版本中很多 API 进行了重构变更,导致很多旧写法失效

下面记录一下 history 模块在 v6 中的用法

在封装的request等非组件代码中如何使用 history 进行路由?

1. history路由用法

createBrowserHistory() 创建的 history 与新的 unstable_HistoryRouter API进行上下文绑定

注意:

在 v6 版本中如果不对上下文进行绑定直接使用 createBrowserHistory() 创建的 history 进行编程式路由操作

将出现路由变化 UI 不变化的问题,hashhistory 模式同理。

import { createBrowserHistory } from 'history';
import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom';

let history = createBrowserHistory();

function App() {
  return (
    <HistoryRouter history={history}>
      // The rest of your app
    </HistoryRouter>
  );
}

history.push("/foo");

2. hash路由用法

import HashHistory from 'history/hash';
import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom';

function App() {
  return (
    <HistoryRouter history={HashHistory}>
      // The rest of your app
    </HistoryRouter>
  );
}

history.push("/foo");

项目升级了v6版本,怎么兼容旧的Class组件?

使用新的 hooks API封装高阶组件包裹 class 组件进行 props 的传递

import {
  useLocation,
  useNavigate,
  useParams,
} from "react-router-dom";

function withRouter(Component) {
  function ComponentWithRouterProp(props) {
    let location = useLocation();
    let navigate = useNavigate();
    let params = useParams();
    return (
      <Component
        {...props}
        router={{ location, navigate, params }}
      />
    );
  }

  return ComponentWithRouterProp;
}

// class components
@withRouter()
class YouClassComponent extends React.Component {}
export default YouClassComponent

// or

class YouClassComponent extends React.Component {}
export default withRouter(YouClassComponent)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Remix后台开发之remix-antd-admin配置过程

    Remix后台开发之remix-antd-admin配置过程

    这篇文章主要为大家介绍了Remix后台开发之remix-antd-admin配置过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 详解Jotai Immer如何实现undo redo功能示例详解

    详解Jotai Immer如何实现undo redo功能示例详解

    这篇文章主要为大家介绍了详解Jotai Immer如何实现undo redo功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • react实现记录拖动排序

    react实现记录拖动排序

    这篇文章主要介绍了react实现记录拖动排序的相关资料,需要的朋友可以参考下
    2023-07-07
  • React Native中TabBarIOS的简单使用方法示例

    React Native中TabBarIOS的简单使用方法示例

    最近在学习过程中遇到了很多问题,TabBarIOS的使用就是一个,所以下面这篇文章主要给大家介绍了关于React Native中TabBarIOS简单使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-10-10
  • react如何解决Hooks闭包陷阱解决方案

    react如何解决Hooks闭包陷阱解决方案

    在React中使用Hooks时,开发者可能会遇到一些常见的坑点,这篇文章主要介绍了react如何解决Hooks闭包陷阱的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-05-05
  • 深入理解React虚拟Dom

    深入理解React虚拟Dom

    虚拟DOM是一种轻量级的JavaScript对象,用于描述真实网页的DOM结构和属性,存在于内存中,本文就来详细的介绍React虚拟Dom的实现,感兴趣的可以了解一下
    2026-01-01
  • React-Router如何进行页面权限管理的方法

    React-Router如何进行页面权限管理的方法

    本篇文章主要介绍了React-Router如何进行页面权限管理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Parcel 打包示例(React HelloWorld)

    Parcel 打包示例(React HelloWorld)

    本篇文章主要介绍了Parcel 打包示例(React HelloWorld),详细的介绍了Parcel打包的特点和使用示例,有兴趣的可以了解一下
    2018-01-01
  • react配合antd组件实现的管理系统示例代码

    react配合antd组件实现的管理系统示例代码

    这篇文章主要介绍了react配合antd组件实现的管理系统示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • React useState超详细讲解用法

    React useState超详细讲解用法

    我正在处理的组件是表单的时间输入。表单相对复杂,并且是动态生成的,根据嵌套在其他数据中的数据显示不同的字段。我正在用useReducer管理表单的状态,到目前为止效果很好
    2022-11-11

最新评论