为什么我在指定他们错误的时候会得到这些React PropType错误?

为什么我在指定他们错误的时候会得到这些React PropType错误?

问题描述:

我有一个编辑表单组件,它与Apollo ClientRedux-Form连线,并且我还安装了prop-types为什么我在指定他们错误的时候会得到这些React PropType错误?

我记得随着时间的推移,第三方库有时会抛出这些消息,如果他们缺少proptypes,或者我的某些父组件不正确使用prop-types。

虽然我不知道该在哪里寻找或者为什么,但是我很难推理它。

这里是错误的截图,一个来自Apollo,一个来自Redux-Form

enter image description here 但是,

我对这个观点宣称道具类型:

PersonEdit.propTypes = { 
    ... ✂ 
    client: PropTypes.shape(PropTypes.any), 
    initialValues: PropTypes.shape(PropTypes.object), 
} 

PersonEdit.defaultProps = { 
    ... ✂ 
    client: undefined, 
    initialValues: undefined, 
} 

我也试过用isRequired包含在它们上面:

PersonEdit.propTypes = { 
    ... ✂ 
    client: PropTypes.shape(PropTypes.any).isRequired, 
    initialValues: PropTypes.shape(PropTypes.object).isRequired, 
} 

任何人都可以帮助我理解这些道具类型相关错误的性质吗?

我非常强烈地感觉到,我之前阅读过这方面的内容,可能会涉及一些“父”逻辑或在视图之前被调用的内容,但我不清楚如何弄清楚。

我不明白为什么说initialValues.isRequiredclient.isRequired当我的代码没有按要求指定他们

哦,这里是我此编辑形式出口,因为我觉得有它相关的机会:

export default compose(
    connect(mapStateToProps, { 
    onServerError, 
    getPerson, 
    onBackPress, 
    }), 
    // graphql(PERSON_EDIT_MUTATION), 
    reduxForm({ 
    validate, 
    form: 'PersonEdit', 
    enableReinitialize: true, 
    }), 
)(withApollo(PersonEdit)) 

我只是想混音的代码和切碎各种事情了身边的时候componentWillMountcomponentDidMount运行,并且我评论了所有内容以触发NotFoundPage组件而不是编辑窗体,并且它仍然生成相同的错误。

如果我注释掉propTypesdefaultProps声明,错误就会消失,所以它与它们有某种关系。

你的问题肯定与此代码

PersonEdit.defaultProps = { 
    ... ✂ 
    client: undefined, 
    initialValues: undefined, 
} 

要设置的道具是对象相关的,你设置自己的价值为undefined。你为什么这样做?

只要将其设置为类似(或什么不是未定义)

PersonEdit.defaultProps = { 
    ... ✂ 
    client: null, 
    initialValues: null, 
} 

而且,你为什么要设置类型这样的检查?为什么你使用任何和物体内部形状?你可以这样写:

PersonEdit.propTypes = { 
    ... ✂ 
    client: PropTypes.any.isRequired, 
    initialValues: PropTypes.object.isRequired, 
} 

希望有帮助!

+0

我不能使用'PropTypes.any','PropTypes.object'或'PropTypes.array',因为它们被'eslint-config-airbnb'禁止,因为它们没有足够的描述性。你可以在'PropTypes.shape()'或'PropTypes.arrayOf()'中使用它们。我相信PropTypes.any是一样的没有任何东西。为什么即使检查类型是否允许也可以? – agm1984

+0

我试着将这些默认值更改为'null',但它不会改变它。我开始认为这与巴贝尔的运动方式有关。 – agm1984

+0

但是,感谢您的警报,我调查了对它的不同约束,并且它使错误消失:'client:PropTypes.objectOf(PropTypes.any),' 'initialValues:PropTypes.objectOf(PropTypes。任何),' – agm1984