Ich baue eine App mit React, React-Router (v5) und Redux und frage mich, wie auf die Parameter der aktuellen URL in einer übergeordneten Route zugegriffen werden kann.So erhalten Sie Params in der übergeordneten Routenkomponente
Das ist mein Eintrag ist, die 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>
Und das ist meine ProjectsPage
Komponente:
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))
Das Problem ist, dass der console.log
Ausgang in meiner render
Methode ist {"path":"/projects","url":"/projects","isExact":false,"params":{}}
obwohl die URL http://localhost:3000/projects/14
ist .
Ich möchte eine ID
Prop zu meiner ProjectList
hinzufügen, um das aktuell ausgewählte Projekt hervorzuheben.
Ich könnte die ID des Projekts in einem Geschäft in meiner ProjectPage
Komponente speichern, aber ich denke, das wäre ein wenig verwirrend, vor allem, weil die URL die Informationen tatsächlich hat - also warum sollte ich etwas in den Laden schreiben?
Weitere (schlecht?) Ansatz wäre, die Lage zu analysieren Objekt der die ID von mir, aber ich denke, es gibt eine react-router
/react-router-redux
Art und Weise ist es, die params an dieser Stelle zu bekommen, die ich übersehen habe.
Das ist großartig! Das ist, was ich gesucht habe :-) Im Moment benutze ich 'router-parser', aber eine Methode aus dem 'react-router'-Paket ist absolut sinnvoll. Tatsächlich verwende ich bereits Konstanten für die Route :-) – Slevin