私はReact、React-Router(v5)とReduxでアプリケーションを構築しており、親ルートの現在のURLのパラメータにアクセスする方法を知りました。私のエントリです親ルートコンポーネントでparamsを取得する方法
、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))
問題はURLがhttp://localhost:3000/projects/14
ですが、私のrender
方法でconsole.log
出力が{"path":"/projects","url":"/projects","isExact":false,"params":{}}
であること、です。
私はProjectList
にID
小道具を追加して、現在選択されているプロジェクトを強調したいと考えています。
私のProjectPage
コンポーネント内の店舗にプロジェクトのIDを保存することができましたが、これはちょっと混乱していると思います。特にURLに実際に情報があるためです。
別の(悪い?)アプローチは、自分自身でIDを取得するロケーションオブジェクトを解析することですが、私が見落としたこの時点でパラメータを取得するにはreact-router
/react-router-redux
の方法があると思います。
これは素晴らしいです!それは私が探していたものです:-)現時点で私は 'router-parser'を使っていますが、' react-router'パッケージのメソッドを使うことは絶対的な意味を持ちます。実際には、私はすでにルートに定数を使用しています:-) – Slevin