我有一個編輯表單組件,它與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
聲明,錯誤就會消失,所以它與它們有某種關係。
我不能使用'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