我正在使用 React、React-Router (v5) 和 Redux 构建一个应用程序,想知道如何在父路由中访问当前 URL 的参数。
这是我的条目router.js
:
<Wrapper>
<Route exact path="/login" render={(props) => (
<LoginPage {...props} entryPath={this.entryPath} />
)} />
<Route exact path="/" component={UserIsAuthenticated(HomePage)} />
<Route exact path="/about" component={UserIsAuthenticated(AboutPage)} />
<Route path="/projects" component={UserIsAuthenticated(ProjectsPage)} />
</Wrapper>
这就是我的ProjectsPage
组成部分:
class ProjectsPage extends PureComponent {
componentDidMount() {
this.props.fetchProjectsRequest()
}
render() {
console.log(this.props.active)
if (this.props.loading) {
return <Loading />
} else {
return (
<Wrapper>
<Sidebar>
<ProjectList projects={this.props.projects} />
</Sidebar>
<Content>
<Route exact path="/projects" component={ProjectsDashboard} />
<Switch>
<Route exact path="/projects/new" component={ProjectNew} />
<Route exact path="/projects/:id/edit" component={ProjectEdit} />
<Route exact path="/projects/:id" component={ProjectPage} />
</Switch>
</Content>
</Wrapper>
)
}
}
}
const enhance = connect(
(state, props) => ({
active: props.match,
loading: projectSelectors.loading(state),
projects: projectSelectors.projects(state)
}),
{
fetchProjectsRequest
}
)
export default withRouter(enhance(ProjectsPage))
问题是,是,console.log
我的输出render
方法是{"path":"/projects","url":"/projects","isExact":false,"params":{}}
尽管该网址http://localhost:3000/projects/14
。
我想向ID
my添加一个propsProjectList
以突出显示当前选定的项目。
我可以将项目的 ID 保存在我的ProjectPage
组件内的 store 中,但我认为这会有点混乱,尤其是因为 URL 实际上包含信息——那么我为什么要在 store 中写一些东西呢?
另一种(不好?)方法是解析位置对象并自己获取 ID,但我认为此时有一种react-router
/react-router-redux
方法可以获取我忽略的参数。