问题
在 react-router-dom v6 中,Route
组件不再有 route props ( history
, location
, and match
),当前的解决方案是使用 React 钩子的“版本”来在被渲染的组件中使用。但是,React 钩子不能在类组件中使用。
要使用类组件访问匹配参数,您必须转换为函数组件,或者滚动您自己的自定义withRouter
高阶组件以注入“路由props”,就像v5.x 中的withRouter
HOCreact-router-dom
所做的那样。
解决方案
我不会介绍将类组件转换为函数组件。这是一个自定义withRouter
HOC示例:
const withRouter = WrappedComponent => props => {
const params = useParams();
// etc... other react-router-dom v6 hooks
return (
<WrappedComponent
{...props}
params={params}
// etc...
/>
);
};
并用新的 HOC 装饰组件。
export default withRouter(Post);
这将为params
类组件注入一个props。
this.props.params.id