Javascript 如何使用';这个.props.params';你有什么反应?

Javascript 如何使用';这个.props.params';你有什么反应?,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我向我的组件发送一个特定的id(idValue),并像这样使用它: componentDidMount() { this.onHandleFetch(this.props.params.idValue); } 但有时此组件在没有任何输入参数(没有idValue)的情况下打开,我得到以下错误: TypeError: Cannot read property 'idValue' of undefined 我怎样才能修好它 我试过使用typeof,但没有成功 在从中传输值的组件中,我使

我向我的组件发送一个特定的id(idValue),并像这样使用它:

componentDidMount() {
    this.onHandleFetch(this.props.params.idValue);
  }
但有时此组件在没有任何输入参数(没有idValue)的情况下打开,我得到以下错误:

TypeError: Cannot read property 'idValue' of undefined
我怎样才能修好它

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


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

错误告诉我们,
this.props.params
有时是
未定义的
(可能是因为根本没有向组件传递
参数)

static defaultProps = {
    params:{}
}
我怎样才能修好它

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

如果没有,请在以下情况下使用

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

错误告诉我们,
this.props.params
有时是
未定义的(可能是因为根本没有
params
传递给组件)

我怎样才能修好它

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

如果没有,请在以下情况下使用

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

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

MyComponent.defaultProps = {
  params: {}
};
这意味着当您尝试从
componentDidMount()
访问参数时,
This.props.params
将不会为空,如果您在使用组件时没有像这样为参数传递对象

  • 使用params
    将使用此处传递的参数
  • 如果没有参数,则
    将返回到上面的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);
    }
    

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

    MyComponent.defaultProps = {
      params: {}
    };
    
    这意味着当您尝试从
    componentDidMount()
    访问参数时,
    This.props.params
    将不会为空,如果您在使用组件时没有像这样为参数传递对象

  • 使用params
    将使用此处传递的参数
  • 如果没有参数,则
    将返回到上面的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);
    }
    

    可以通过始终将
    params
    prop传递给组件或在访问组件之前检查它是否存在来解决此问题。params实际上可能是未定义的。尝试记录您的整个道具,以确保您拥有所需的数据。您应该提供更多信息,如params如何传递到组件以及它来自何处。可以通过始终将
    params
    道具传递到组件或在访问它之前检查它是否在那里来解决此问题。params实际上可能是未定义的人未定义的人。尝试记录整个道具,以确保您拥有所需的数据。您应该提供更多信息,例如参数如何传递到组件以及它从代码转储中的位置,这些都不是有用的答案。说你做了什么,为什么,以及它是如何工作的,最好是通过文档链接。谢谢!我在defaultProps中添加了“idValue:'-1'”,并使用ifCode转储在代码中对其进行检查并不是有用的答案。说你做了什么,为什么,以及它是如何工作的,最好是通过文档链接。谢谢!我向defaultProps添加了“idValue:'-1',并使用ifThis在代码中检查它与OP描述的内容不匹配。这与OP描述的内容不匹配。我以前尝试过,但没有帮助。但是谢谢你的帮助!我用“defaultProps”解决了我的问题,我以前试过,但它对我没有帮助。但是谢谢你的帮助!我使用“defaultProps”解决了我的问题