为什么我在指定他们错误的时候会得到这些React PropType错误?
问题描述:
我有一个编辑表单组件,它与Apollo Client
和Redux-Form
连线,并且我还安装了prop-types
。为什么我在指定他们错误的时候会得到这些React PropType错误?
我记得随着时间的推移,第三方库有时会抛出这些消息,如果他们缺少proptypes,或者我的某些父组件不正确使用prop-types。
虽然我不知道该在哪里寻找或者为什么,但是我很难推理它。
这里是错误的截图,一个来自Apollo
,一个来自Redux-Form
:
我对这个观点宣称道具类型:
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.isRequired
或client.isRequired
当我的代码没有按要求指定他们。
哦,这里是我此编辑形式出口,因为我觉得有它相关的机会:
export default compose(
connect(mapStateToProps, {
onServerError,
getPerson,
onBackPress,
}),
// graphql(PERSON_EDIT_MUTATION),
reduxForm({
validate,
form: 'PersonEdit',
enableReinitialize: true,
}),
)(withApollo(PersonEdit))
我只是想混音的代码和切碎各种事情了身边的时候componentWillMount
和componentDidMount
运行,并且我评论了所有内容以触发NotFoundPage
组件而不是编辑窗体,并且它仍然生成相同的错误。
如果我注释掉propTypes
和defaultProps
声明,错误就会消失,所以它与它们有某种关系。
答
你的问题肯定与此代码
PersonEdit.defaultProps = {
... ✂
client: undefined,
initialValues: undefined,
}
要设置的道具是对象相关的,你设置自己的价值为undefined。你为什么这样做?
只要将其设置为类似(或什么不是未定义)
PersonEdit.defaultProps = {
... ✂
client: null,
initialValues: null,
}
而且,你为什么要设置类型这样的检查?为什么你使用任何和物体内部形状?你可以这样写:
PersonEdit.propTypes = {
... ✂
client: PropTypes.any.isRequired,
initialValues: PropTypes.object.isRequired,
}
希望有帮助!
我不能使用'PropTypes.any','PropTypes.object'或'PropTypes.array',因为它们被'eslint-config-airbnb'禁止,因为它们没有足够的描述性。你可以在'PropTypes.shape()'或'PropTypes.arrayOf()'中使用它们。我相信PropTypes.any是一样的没有任何东西。为什么即使检查类型是否允许也可以? – agm1984
我试着将这些默认值更改为'null',但它不会改变它。我开始认为这与巴贝尔的运动方式有关。 – agm1984
但是,感谢您的警报,我调查了对它的不同约束,并且它使错误消失:'client:PropTypes.objectOf(PropTypes.any),' 'initialValues:PropTypes.objectOf(PropTypes。任何),' – agm1984