2017-11-18 103 views
0

我有一個編輯表單組件,它與Apollo ClientRedux-Form連線,並且我還安裝了prop-types爲什麼我在指定他們錯誤的時候會得到這些React PropType錯誤?

我記得隨着時間的推移,第三方庫有時會拋出這些消息,如果他們缺少proptypes,或者我的某些父組件不正確使用prop-types。

雖然我不知道該在哪裏尋找或者爲什麼,但是我很難推理它。

這裏是錯誤的截圖,一個來自Apollo,一個來自Redux-Form

enter image description here 但是,

我對這個觀點宣稱道具類型:

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

你的問題肯定與此代碼

PersonEdit.defaultProps = { 
    ... ✂ 
    client: undefined, 
    initialValues: undefined, 
} 

要設置的道具是對象相關的,你設置自己的價值爲undefined。你爲什麼這樣做?

只要將其設置爲類似(或什麼不是未定義)

PersonEdit.defaultProps = { 
    ... ✂ 
    client: null, 
    initialValues: null, 
} 

而且,你爲什麼要設置類型這樣的檢查?爲什麼你使用任何和物體內部形狀?你可以這樣寫:

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

希望有幫助!

+0

我不能使用'PropTypes.any','PropTypes.object'或'PropTypes.array',因爲它們被'eslint-config-airbnb'禁止,因爲它們沒有足夠的描述性。你可以在'PropTypes.shape()'或'PropTypes.arrayOf()'中使用它們。我相信PropTypes.any是一樣的沒有任何東西。爲什麼即使檢查類型是否允許也可以? – agm1984

+0

我試着將這些默認值更改爲'null',但它不會改變它。我開始認爲這與巴貝爾的運動方式有關。 – agm1984

+0

但是,感謝您的警報,我調查了對它的不同約束,並且它使錯誤消失:'client:PropTypes.objectOf(PropTypes.any),' 'initialValues:PropTypes.objectOf(PropTypes。任何),' – agm1984

相關問題