Reactjs 当我指定了这些类型的错误是关于什么的时候,为什么会出现这些类型的错误?

Reactjs 当我指定了这些类型的错误是关于什么的时候,为什么会出现这些类型的错误?,reactjs,redux-form,apollo,react-proptypes,Reactjs,Redux Form,Apollo,React Proptypes,我有一个编辑表单组件,它与阿波罗客户端和Redux表单连接,我还安装了道具类型 我记得我曾经读过一些文章,第三方库有时会抛出此类消息,如果它们缺少proptype,或者我的某个父组件没有正确使用prop类型 不过我很难对它进行推理,因为我不知道该去哪里找,也不知道为什么 这是错误的屏幕截图,一个来自阿波罗,一个来自Redux表单 但是, 我在此视图中声明了道具类型: PersonEdit.propTypes = { ... ✂ client: PropTypes.shape(PropT

我有一个编辑表单组件,它与阿波罗客户端和Redux表单连接,我还安装了
道具类型

我记得我曾经读过一些文章,第三方库有时会抛出此类消息,如果它们缺少proptype,或者我的某个父组件没有正确使用prop类型

不过我很难对它进行推理,因为我不知道该去哪里找,也不知道为什么

这是错误的屏幕截图,一个来自阿波罗,一个来自Redux表单

但是,

我在此视图中声明了道具类型:

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,
}
有人能帮我理解这些道具类型相关错误的性质吗

我强烈地感觉到,我以前读过这篇文章,它可能涉及到一些“家长”的逻辑或在视图之前被调用的东西,但我不清楚如何理解它

我不明白当我的代码未按要求指定它们时,为什么会显示
初始值.isRequired
客户端.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,
}
您将道具设置为对象,并将其值设置为未定义。你为什么这么做

只需将其设置为类似(或任何未定义的内容)

还有,你为什么要这样设置类型检查?为什么在形状内部使用任何对象?你可以这样写

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

希望有帮助

您的问题肯定与此代码有关

PersonEdit.defaultProps = {
  ... ✂
  client: undefined,
  initialValues: undefined,
}
您将道具设置为对象,并将其值设置为未定义。你为什么这么做

只需将其设置为类似(或任何未定义的内容)

还有,你为什么要这样设置类型检查?为什么在形状内部使用任何对象?你可以这样写

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

希望有帮助

我不能使用
PropTypes.any
PropTypes.object
PropTypes.array
,因为它们是
eslint config airbnb
所禁止的,因为它们不够描述性。您可以在
PropTypes.shape()
PropTypes.arrayOf()中使用它们。我相信任何东西都等于什么也不放。如果允许的话,为什么还要检查类型呢?我尝试将这些默认值更改为
null
,但没有改变它。我开始认为这与babel的传输方式有关。但是,多亏了您的提醒,我研究了对其施加不同的约束,并成功地消除了错误:
client:PropTypes.objectOf(PropTypes.any),
初始值:PropTypes.objectOf(PropTypes.any),
我知道airbnb lint非常保守,但我认为你只是在愚弄非描述性规则,没有遵守它。该规则提醒您声明对象属性,以避免出现意外错误和未处理的错误。我不能使用
PropTypes.any
PropTypes.object
、或
PropTypes.array
,因为
eslint config airbnb
禁止它们,因为它们描述不够。您可以在
PropTypes.shape()
PropTypes.arrayOf()中使用它们。我相信任何东西都等于什么也不放。如果允许的话,为什么还要检查类型呢?我尝试将这些默认值更改为
null
,但没有改变它。我开始认为这与babel的传输方式有关。但是,多亏了您的提醒,我研究了对其施加不同的约束,并成功地消除了错误:
client:PropTypes.objectOf(PropTypes.any),
初始值:PropTypes.objectOf(PropTypes.any),
我知道airbnb lint非常保守,但我认为你只是在愚弄非描述性规则,没有遵守它。该规则提醒您声明对象属性,这样您就不会出现不希望出现的错误,也不会出现未处理的错误。