Javascript 使用PropTypes进行类型检查时,即使道具显示正确,也会出现错误

Javascript 使用PropTypes进行类型检查时,即使道具显示正确,也会出现错误,javascript,reactjs,react-props,typechecking,react-proptypes,Javascript,Reactjs,React Props,Typechecking,React Proptypes,我正在使用道具类型对我的组件进行类型检查,但即使我正确地获得了正确类型的值,我仍然会收到如下错误消息: 警告:失败的道具类型:道具id在中标记为所需 NewChannel,但其值为未定义 当我console.log道具id时,它不是未定义的。您键入的检查说明:props将有一个id字段,如:props.id。但是您正在从props.match.params获取id。这就是它抱怨的原因。您键入的检查说明:props将有一个id字段,如:props.id。但是您正在从props.match.para

我正在使用
道具类型
对我的组件进行类型检查,但即使我正确地获得了正确类型的值,我仍然会收到如下错误消息:

警告:失败的道具类型:道具
id
在中标记为所需
NewChannel
,但其值为
未定义


当我
console.log
道具
id
时,它不是未定义的。

您键入的检查说明:
props
将有一个id字段,如:
props.id
。但是您正在从
props.match.params
获取id。这就是它抱怨的原因。

您键入的检查说明:
props
将有一个id字段,如:
props.id
。但是您正在从
props.match.params
获取id。这就是它抱怨的原因。

我该如何解决这个问题?可能类似于:NewChannel.propTypes={match:propTypes.shape({params:propTypes.shape({id:propTypes.string.isRequired})}你可以在这里检查所有的可能性:嗯。。谢谢你,但我仍然得到
未定义的
。我试过使用
对象
而不是
形状
,但仍然使用了相同的东西,因为形状是用于对象的。例如,在您的案例中,您希望验证
match
是否是一个对象,而不是字符串、数字或数组。稍后,您要验证
匹配
是否为字段
参数
,该字段也是一个对象,最后验证
参数
是否有一个字段
id
,该字段是一个字符串。如果您知道对象的确切形状,也可以使用
PropTypes.exact
。但在这种情况下,我认为您处理的对象将有更多字段,但您不关心它们,因此您只检查一次您关心的字段。我如何解决这个问题?可能类似于:NewChannel.propTypes={match:propTypes.shape({params:propTypes.shape({id:propTypes.string.isRequired})}你可以在这里检查所有的可能性:嗯。。谢谢你,但我仍然得到
未定义的
。我试过使用
对象
而不是
形状
,但仍然使用了相同的东西,因为形状是用于对象的。例如,在您的案例中,您希望验证
match
是否是一个对象,而不是字符串、数字或数组。稍后,您要验证
匹配
是否为字段
参数
,该字段也是一个对象,最后验证
参数
是否有一个字段
id
,该字段是一个字符串。如果您知道对象的确切形状,也可以使用
PropTypes.exact
。但在这种情况下,我认为您正在处理一个对象,该对象将有更多字段,但您不关心它们,因此您只检查一次您关心的字段。
const NewChannel = props => {    
    const { id } = props.match.params
    return(
    //some logic
    )
}

NewChannel.propTypes = {
    id: PropTypes.string.isRequired
}

export default React.memo(NewChannel)