【发布时间】:2022-12-10 13:40:44
【问题描述】:
最近我开始了新项目并将它的库升级到最新的,包括react。从类组件内的动态路由访问传递的参数时,我遇到了第一个问题。在过去,为了做到这一点,需要将导出的类组件包装在路由器返回的 withRouter 函数中。在文档中,他们说此功能已在v6 中删除,如果您需要,可以手动重新创建它docs link。
我创建了with-router.jsx 文件并粘贴了他们的代码:
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;
}
接下来我将它添加到我的类组件中:
import React, { Component } from 'react';
import withRouter from './with-router';
class Product extends Component {
render() {
return (
<div className="product">...</div>
);
}
}
export default withRouter(Product);
它不起作用,出现以下错误:
Compiled with problems:
WARNING in ./src/components/product.jsx 67:15-25
export 'default' (imported as 'withRouter') was not found in './with-router' (module has no exports)
所以看起来他们自己的代码不起作用,也许有人知道如何让它工作?另一件事是考虑未来的影响,删除而不替换的功能,如果你需要它 - 重新创建它?如果您无论如何都必须手动添加它,为什么要删除它,这对最近的反应没有意义。
- “反应”:“^18.2.0”
- “反应域”:“^18.2.0”
- “react-router-dom”:“^6.4.4”
- “webpack”:“^5.74.0”
- “webpack-cli”:“^4.10.0”
- “webpack-dev-server”:“^4.11.1”
【问题讨论】:
标签: javascript reactjs react-router