所以我收到一条错误消息-Uncaught TypeError:无法读取未定义的属性(读取"params"(
AddOrUpdateProduct.js
function mapStateToProps(state, ownProps) {
const productId = ownProps.match.params.productId;
const product =
productId && state.productListReducer.length > 0
? getProductById(state.productListReducer, productId)
: {}
return {
product: product,
products: state.productListReducer,
categories: state.categoryListReducer
}
}
App.js
<Routes>
<Route path="/" exact element={<Dashboard />} />
<Route path="/product" exact element={<Dashboard />} />
<Route path="/saveproduct/:productId" element={<AddOrUpdateProduct />} />
<Route path="/cart" exact element={<CartDetail />} />
</Routes>
我正在尝试使用"ownProps.match.params.productid"在url中获取productid
问题
在react-router-dom@6
中,不再有路由道具。如果您需要访问productId
路由参数,则需要创建一个更高阶组件来访问路由道具,并将它们作为道具注入到类组件中。
解决方案
创建自定义withRouter
组件:
import { useParams } from 'react-router-dom';
const withRouter = Component => props => {
const params = useParams();
return <Component {...props} params={params} />;
}
包裹并装饰AddOrUpdateProduct
组件,使其将params
作为道具注入。
function mapStateToProps(state, ownProps) {
const productId = ownProps.params.productId;
const product =
productId && state.productListReducer.length > 0
? getProductById(state.productListReducer, productId)
: {};
return {
product,
products: state.productListReducer,
categories: state.categoryListReducer
};
}
export default connect(mapStateToProps)(withRouter(AddOrUpdateProduct));
这里没有react专家,但我认为在导出组件时需要使用withRoute
,类似于
export default withRouter(AddOrUpdateProduct);