【发布时间】:2021-03-10 00:11:19
【问题描述】:
我想要路由参数中的特定道具并使用它来过滤redux-store中的数据。
Product.js
import React from 'react';
import { useParams } from 'react-router-dom';
import { connect } from 'react-redux';
const Product = (props) => {
let { slug } = useParams();
//console.log(props.match)
return (
<div>
<h3>Welcome to <b>{ slug }</b> page</h3>
</div>
)
}
const mapStateToProps = ( state, ownProps ) => {
// let id = slug;
return { item: state.items[0]}
}
export default connect(
mapStateToProps
)(Product);
App.js
function App() {
return (
<Router>
<Navbar/>
<Switch>
<Route exact path="/:slug">
<Product/>
</Route>
<Route exact path="/">
<Home/>
</Route>
</Switch>
</Router>
);
}
以及导航到/slug 路径的任何链接都以Product.js 结尾,因为Product.js 没有嵌套在其他任何地方,所以我无法获得特定的道具传递但路由参数。从我的角度来看,这是完全错误的,但我想不出更好的方法。
【问题讨论】:
-
你的 React 和 Redux 库的版本是多少?
-
@ridoansaleh
"react": "^17.0.1", "redux": "^4.0.5", "react-redux": "^7.2.2" -
@ridoansaleh 在生产中,我认为我应该将
slug设置为有意义的东西,例如项目名称而不是 id 以获得网站排名 (SEO)。在这种情况下,我的 slug 应该是 name + id + generate random stuffs,最后从路由参数中提取 id 以使用它过滤数据细节。这真的是 React 开发者在现实世界中所做的吗? -
是的,您应该将与您的目的相关的参数命名为 productID 或 productName
标签: reactjs react-redux react-router-dom