【发布时间】:2024-10-08 11:35:02
【问题描述】:
我正在使用 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))
问题是,我的render 方法中的console.log 输出是{"path":"/projects","url":"/projects","isExact":false,"params":{}},尽管URL 是http://localhost:3000/projects/14。
我想在我的ProjectList 中添加一个ID 属性以突出显示当前选定的项目。
我可以将项目的 ID 保存在我的 ProjectPage 组件内的商店中,但我认为这会有点混乱,特别是因为 URL 实际上包含信息 - 那么我为什么要在商店中写一些东西呢?
另一种(不好的?)方法是自己解析位置对象以获取 ID,但我认为此时有一种 react-router/react-router-redux 方法可以获取我忽略的参数。
【问题讨论】:
标签: reactjs react-router react-redux