我有一个与Apollo Client
和Redux-Form
连接的编辑表单组件,我也安装了prop-types
。
我记得我随着时间的推移已经做过一些阅读,如果第三方图书馆缺少预测类型,或者如果我的某些父组件没有正确使用道具类型,那么第三方图书馆有时会抛出这些消息。
我很难推理它,因为我不知道在哪里寻找或为什么。
以下是错误的屏幕截图,一个来自Apollo
,另一个来自Redux-Form
:
我在此视图中声明了prop类型:
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
声明,错误就会消失,因此它与它们有某种关联。
答案 0 :(得分:2)
您的问题肯定与此代码有关
PersonEdit.defaultProps = {
... ✂
client: undefined,
initialValues: undefined,
}
您将道具设置为对象,并且您将其值设置为undefined。你为什么这样做?
只需将其设置为(或任何未定义的)
PersonEdit.defaultProps = {
... ✂
client: null,
initialValues: null,
}
另外,为什么要设置类型检查呢?为什么你在形状中使用任何物体?你可以把它写成这个
PersonEdit.propTypes = {
... ✂
client: PropTypes.any.isRequired,
initialValues: PropTypes.object.isRequired,
}
希望有所帮助!