开发者问题收集

无法读取未定义的属性‘params’,React

2018-12-18
8472

我遇到了一个问题,我以正确的方式传递了 props (在我看来),但仍然出现错误:

我的 App.js 中有以下几行代码

这行代码可以运行:

           <Route path="/users/:username" 
               render={(props) => <Profile  isAuthenticated={this.state.isAuthenticated} currentUser={this.state.currentUser} {...props} />}>
           </Route>

但这个代码不起作用,在渲染“Ride”时出现错误

        <Route path="/ride/:username" 
          render={(props) => <Ride  isAuthenticated={this.state.isAuthenticated} currentUser={this.state.currentUser} {...props} />}>
        </Route>

错误: TypeError:无法读取未定义的属性“params”

  43 |    }
  44 |      
  45 |    componentDidMount() {
> 46 |        const username = this.props.match.params.username;
  47 | ^      this.loadUserProfile(username);
  48 |    }
  49 | 

即使代码在(组件)内部,它们也是相同的……

3个回答

我正在为您当前的问题提供解决方案,但根据您的目的,您可能需要稍微更改代码。您的 Ride 组件获得 undefined ,因为它有一个额外的渲染。这里:

.....
    <div style={{ display: "flex", justifyContent: "center" }}>
        <h6>Made by Konrad Krukar</h6>
    </div>
    <Ride />   <-------- SEE
</Layout>
....

这是在您的 App 组件中。由于它未被 Router 包装,因此您无法获得所需的道具。我不知道渲染它的目的是什么,但也许您可以使用 withRouter

devserkan
2018-12-18

在某些情况下,请检查您是否在 withRouter 中包装了组件

使用 redux 的示例

export default withRouter(
  connect(
    mapStateToProps,
    mapDispatchToProps
  )(ComponentName)
);

或者只是一个功能组件

export default withRouter(ComponentName);
Viktor Bogutskii
2019-01-18

您可以尝试的另一种方法是使用 React 开发人员工具(如果您还没有使用)并查看 props 的样子。我上面的用户还建议将其记录在控制台中,这也可以帮助我们找出问题所在。目前,在应用程序的当前状态下,它无法读取属性“match”。

如果我没有看错的话,没有名为“match”的 prop 被传递给您的组件?

Henry Winget
2018-12-18