【发布时间】:2019-04-12 07:23:59
【问题描述】:
我有这些路线
<Route exact path={`/admin/caters/:id`} component={Cater} />
<Route exact path={'/admin/caters/create'} component={CreateCater} />
当我导航到第一条路线时,我会得到一个具有给定 ID 的餐饮服务。并且渲染了 Cater 组件
当我导航到第二条路线时,页面上呈现了 CreateCater 组件,但我注意到正在运行 Cater 组件中使用的一些 redux 操作。所以这两个组件都以某种方式被渲染 - 但我不知道为什么。
以下是组件:
餐饮:
class Cater extends Component {
async componentDidMount() {
console.log('Cater component did mount')
const { match: { params: { id }}} = this.props
this.props.get(id)
}
render() {
const { cater } = this.props
if(!cater) {
return null
}
else {
return (
<div>
... component data ...
</div>
)
}
}
}
const mapStateToProps = (state, props) => {
const { match: { params: { id }}} = props
return {
cater: caterSelectors.get(state, id)
}
}
const mapDispatchToProps = (dispatch, props) => {
return {
get: (id) => dispatch(caterActions.get(id))
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Cater)
创建餐饮:
export default class CreateCaterPage extends Component {
render() {
return (
<React.Fragment>
<Breadcrumbs />
<CaterForm />
</React.Fragment>
)
}
}
当我转到 /admin/caters/create' 时,我可以在 Cater 组件内的 componenDidMount() 生命周期方法中看到 console.log。
我不知道我做错了什么:(
【问题讨论】:
-
尝试交换
<Route />标签(先放 /create),如果有任何改变,请告诉我 -
感谢@FrankerZ 的回复。我试过了,没有任何区别。我尝试使 url 的长度不同,因此创建看起来像
/admin/cater/create/cater。然后我没有任何问题,但这不是我想要构建我的 URL 的方式
标签: javascript reactjs react-redux react-router react-router-v4