mapStateToProps ownProps 参数为空

Posted

技术标签:

【中文标题】mapStateToProps ownProps 参数为空【英文标题】:mapStateToProps ownProps params are empty 【发布时间】:2018-02-07 04:24:01 【问题描述】:

我是 React、React Router (v4) 和 Redux 的新手。我试图通过访问ownProps.match.params.id 来访问来自mapStateToProps(state, ownProps) 的URL 参数,但params 数组始终为空。我已经使用调试器检查了 ownProps 并且应该传递的 id 参数不在 ownProps 的任何地方。

这是我的路线中的一个 sn-p:

    <Switch>
      <Route exact path='/' component=HomePage />
      <Route path='/about' component=AboutPage />
      <Route path='/course' component=ManageCoursePage />
      <Route path='/course/:id' component=ManageCoursePage />
      <Route path='/courses' component=CoursesPage />
    </Switch>

这里是来自ManageCoursePage.js的相关代码:

class ManageCoursePage extends React.Component 
  constructor(props, context) 
    super(props, context);

    this.state = 
      course: Object.assign(, props.course),
      errors: ,
    ;
  


function mapStateToProps(state, ownProps) 
  const courseId = ownProps.match.params.id;
  ...


export default connect(mapStateToProps, mapDispatchToProps)(ManageCoursePage);

【问题讨论】:

【参考方案1】:

您必须翻转以下路由的顺序或将exact 属性设置为第一条路由。

<Route path='/course' component=ManageCoursePage />
<Route path='/course/:id' component=ManageCoursePage />

/course/course/:id 之前匹配,这就是为什么在没有 id 参数的情况下调用 ManageCoursePage。 如果您只想在第一条路线中匹配/course 而不是/course/123,您可以设置exact property。

【讨论】:

以上是关于mapStateToProps ownProps 参数为空的主要内容,如果未能解决你的问题,请参考以下文章

从 Redirect 获取 mapStateToProps 中的 ownProps.match.params.id

反应/Redux mapStateToProps by ownProps

在 react-router v6 的 mapStateToProps 中使用 urlParams

react connect

React-Redux之connect

react-redux 中 connect 参数说明