开发者问题收集

无法读取未定义的属性‘params’(React Router 4)

2017-09-13
57996

我设置了一条路由来渲染一个组件:

<Route exact path="/page/:id" location={this.props.location} key={this.props.location.key} render={({ location }) => (
    <PageStart key={this.props.location.key} />
)} />

然后在该组件 (PageStart) 中,我有:

this.props.match.params.id

但是它抛出了一个错误:

Cannot read property 'params' of undefined

在简单调用 component={} 时传递 props 似乎可以正常工作,但在渲染函数中却不行。为什么?

3个回答

因为使用 render 时,您不会将路由器传递的默认 props 传递到组件中,例如 match、history 等。

当您写下以下内容时:

<PageStart key={this.props.location.key} />

这意味着 PageStart 组件中没有 props 值。

像这样写:

render = {props => <PageStart {...props} key={this.props.location.key} /> } />

现在 {...props 会将所有值传递到 PageStart 组件中。

Mayank Shukla
2017-09-13

因为您没有将任何 match 属性传递给 PageStart。您为其提供了 key ,但没有提供 match 。 尝试以下操作:

<Route 
    exact 
    path="/page/:id" 
    location={this.props.location} 
    key={this.props.location.key} 
    render={({ 
        location, 
        match 
    }) => (
        <PageStart key={this.props.location.key} match={match} />
    )} 
/>
ChrisR
2017-09-13

就我而言,我发现路由器属性中不再是 match ,而是 computedMatch

例如: this.props.computedMatch.params.id

希望这对某人有帮助!

jenkizenki
2018-08-14