代码之家  ›  专栏  ›  技术社区  ›  S.V.

处理组件中通过react路由器传递的参数

  •  5
  • S.V.  · 技术社区  · 7 年前

    因此,在react router v4中,我的路由如下所示:

          <Route path="/suppliers/:id?" component={Suppliers} />
    

    对于子孙后代,这是我的链接: <Link to="/suppliers/123">Place Order</Link>

    <p>{this.props.match.params.id}</p>

    [eslint] 'match' is missing in props validation (react/prop-types)

    因此,我将proptype定义为:

    Suppliers.propTypes = {
      match: PropTypes.shape({
        params: PropTypes.shape({
          id: PropTypes.number,
        }).isRequired,
      }).isRequired,
    };
    

    但感觉我写的样板代码比我可能需要的要多。我的问题是,有没有更好的方法在组件中定义我的proptype,以避免linter错误?此外,如果使用道具,这种解决方案似乎是不可持续的。匹配它将中断的属性更改。还是我做得对?

    提前谢谢。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Hana Alaydrus    7 年前

    您的代码可以,但也可以将proptype定义为object。

    match: PropTypes.object.isRequired
    

    match, location, history . 你可以这样定义它。

    Suppliers.propTypes = {
        match: PropTypes.object.isRequired,
        location: PropTypes.object.isRequired,
        history: PropTypes.object.isRequired
      }
    
        2
  •  0
  •   kevinmartinez    4 年前

    为了涵盖这些关于匹配(和历史)的案例,以取悦linters,您可以这样声明您的道具类型:

         Suppliers.propTypes = {
          match: PropTypes.shape().isRequired,
          }).isRequired,
        };
    

    这是在我们的项目中最适合我们的解决方案。