Reactjs 当我指定了这些类型的错误是关于什么的时候,为什么会出现这些类型的错误?
我有一个编辑表单组件,它与阿波罗客户端和Redux表单连接,我还安装了Reactjs 当我指定了这些类型的错误是关于什么的时候,为什么会出现这些类型的错误?,reactjs,redux-form,apollo,react-proptypes,Reactjs,Redux Form,Apollo,React Proptypes,我有一个编辑表单组件,它与阿波罗客户端和Redux表单连接,我还安装了道具类型 我记得我曾经读过一些文章,第三方库有时会抛出此类消息,如果它们缺少proptype,或者我的某个父组件没有正确使用prop类型 不过我很难对它进行推理,因为我不知道该去哪里找,也不知道为什么 这是错误的屏幕截图,一个来自阿波罗,一个来自Redux表单 但是, 我在此视图中声明了道具类型: PersonEdit.propTypes = { ... ✂ client: PropTypes.shape(PropT
道具类型
我记得我曾经读过一些文章,第三方库有时会抛出此类消息,如果它们缺少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非常保守,但我认为你只是在愚弄非描述性规则,没有遵守它。该规则提醒您声明对象属性,这样您就不会出现不希望出现的错误,也不会出现未处理的错误。