无法使用 Redux ownProps 从 url 获取参数
Can't get parameters from url with Redux ownProps
所以我收到一条错误消息 - 未捕获类型错误:无法读取未定义的属性(读取 '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 中获取产品 ID
这里没有反应专家,但我认为你需要在导出组件时使用 withRoute
,像这样
export default withRouter(AddOrUpdateProduct);
问题
在react-router-dom@6
中不再有路线道具。如果您需要访问 productId
路由参数,那么您将需要创建一个高阶组件来访问路由 props 并将它们作为 props 注入到您的 class 组件中。
解决方案
创建自定义 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));
所以我收到一条错误消息 - 未捕获类型错误:无法读取未定义的属性(读取 '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 中获取产品 ID这里没有反应专家,但我认为你需要在导出组件时使用 withRoute
,像这样
export default withRouter(AddOrUpdateProduct);
问题
在react-router-dom@6
中不再有路线道具。如果您需要访问 productId
路由参数,那么您将需要创建一个高阶组件来访问路由 props 并将它们作为 props 注入到您的 class 组件中。
解决方案
创建自定义 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));