react-router-dom v6 TypeScript withRouter用于类组件[重复]

Posted

技术标签:

【中文标题】react-router-dom v6 TypeScript withRouter用于类组件[重复]【英文标题】:react-router-dom v6 TypeScript withRouter for class components [duplicate] 【发布时间】:2022-01-07 04:40:39 【问题描述】:

我正在尝试在我的 TypeScript React 应用中将 react-router-dom 更新为 v6

在offical react-router-dom documentation 中只是声明:

随着升级到 v5.1,您应该用钩子替换 withRouter 的任何用法。

它完全忽略了类组件

我在网上搜索了很久,但找到的都是文章

谈论 JavaScript 而不是 TypeScript,或 谈谈功能组件,或 参考react-router-domv5(或更低版本),因为他们谈论的是withRouter

在不需要将所有类组件重构为函数组件的 TypeScripp React 应用程序中,是否有一个有据可查的方法将 react-router-dom 升级到 v6?

【问题讨论】:

你是对的,RRDv6 不再导出withRouter HOC。您可以将组件转换为函数组件,也可以使用 v6 挂钩创建自定义 withRouter HOC,并将“路由道具”注入装饰组件。 【参考方案1】:

可能没有很好的文档记录,但this thread on GitHub 可能会为您提供正确的方向来完成这项工作。用户 mjackson 建议将您的类组件包装在一个 HOC 中,这样您就可以将 withRouter 挂钩和您的类组件连接在一起。

// in hocs.js
function withNavigation(Component) 
  return props => <Component ...props navigate=useNavigate() />;


function withParams(Component) 
  return props => <Component ...props params=useParams() />;


// in BlogPost.js
class BlogPost extends React.Component 
  render() 
    let  id  = this.props.params;
    // ...
  


export default withParams(BlogPost);

【讨论】:

以上是关于react-router-dom v6 TypeScript withRouter用于类组件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

React Router(react-router-dom V6 整理)

react-router-dom v6 TypeScript withRouter用于类组件[重复]

如何在 react-router-dom v6 中返回上一条路线

react-router-dom V6

如何使用 react-router-dom v6 中的历史对象重定向到特定页面

React-Router-Dom v6 保护路由