当我指定了错误的时候,为什么我会收到这些React PropType错误?

时间:2017-11-18 07:40:49

标签: reactjs redux-form apollo react-proptypes

我有一个与Apollo ClientRedux-Form连接的编辑表单组件,我也安装了prop-types

我记得我随着时间的推移已经做过一些阅读,如果第三方图书馆缺少预测类型,或者如果我的某些父组件没有正确使用道具类型,那么第三方图书馆有时会抛出这些消息。

我很难推理它,因为我不知道在哪里寻找或为什么。

以下是错误的屏幕截图,一个来自Apollo,另一个来自Redux-Form

enter image description here 但是,

我在此视图中声明了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.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声明,错误就会消失,因此它与它们有某种关联。

1 个答案:

答案 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,
}

希望有所帮助!