【问题标题】:How to use 'this.props.params' in React?如何在 React 中使用“this.props.params”?
【发布时间】:2018-10-17 08:33:17
【问题描述】:

我将某个 id (idValue) 发送到我的组件并像这样使用它:

componentDidMount() {
    this.onHandleFetch(this.props.params.idValue);
  }

但有时这个组件在没有任何输入参数(没有 idValue)的情况下打开,我得到了这个错误:

TypeError: Cannot read property 'idValue' of undefined

我该如何解决?

我尝试过使用typeof,但没有成功

在传递值的组件中,我使用上下文路由器

【问题讨论】:

  • 可以通过始终将 params 属性传递给组件或在访问它之前检查它是否存在来解决此问题。
  • Params 实际上可能是未定义的那个。尝试记录您的整个道具,以确保您拥有预期的数据。
  • 您应该提供更多信息,例如参数如何传递给您的组件以及它来自哪里

标签: javascript reactjs react-router


【解决方案1】:

错误告诉我们this.props.params 有时是undefined(可能是因为根本没有将params 传递给组件)。

我该如何解决?

这取决于如果没有params.idValue,你是否要调用this.onHandleFetch

如果您不这样做,请使用if

componentDidMount() {
  if (this.props.params && this.props.params.idValue) {
    this.onHandleFetch(this.props.params.idValue);
  }
}

如果你这样做,提供一些替代价值,那么:

componentDidMount() {
  this.onHandleFetch((this.props.params && this.props.params.idValue) || replacementValue);
}

这两个假设 idValue 不会是 0

【讨论】:

  • 我之前尝试过,但对我没有帮助。但是谢谢你的帮助!我使用“defaultProps”解决了我的问题
【解决方案2】:
static defaultProps = {
    params:{}
}

【讨论】:

  • 代码转储不是有用的答案。说出您做了什么为什么以及如何工作,最好是文档链接。
  • 谢谢!我添加到 defaultProps "idValue: '-1'" 并使用 if 在代码中检查它
【解决方案3】:

为您尝试访问参数的组件添加适当的默认道具,例如

MyComponent.defaultProps = {
  params: {}
};

这意味着当您尝试从componentDidMount() 访问参数时,如果您在使用组件时没有为参数传递一个对象,this.props.params 将不会为空。

  1. with params <MyComponent params={{ idValue: 1 }} /> 将使用此处传递的参数。
  2. 没有参数 <MyComponent /> 将回退到上面的 defaultProps。

在这种情况下,您只需检查 ID 是否存在,以确保您的组件仅在参数中定义了 idValue 时才进行提取。

componentDidMount() {
    const { params } = this.props;
    if (params.idValue)
        this.onHandleFetch(params.idValue);
    }
}

或者,如果没有定义 idValue,你可以传递一个默认值,例如

componentDidMount() {
    const { params } = this.props;
    this.onHandleFetch(params.idValue || -1);
}

【讨论】:

  • 这与OP描述的不符。
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2020-09-05
  • 2019-10-05
  • 2018-01-09
相关资源
最近更新 更多