2016-12-02 48 views
1

我有這樣一個類:如何在React中驗證Prop的類及其字段的類(嵌套對象)?

class ResponseState() { 
    constructor(data) { 
     this.data = data; 
    } 
} 

現在我可以確認的是,道具就是這種類型的:

Container.propTypes = { 
    myProp: PropTypes.instanceOf(ResponseState).isRequired, 
}; 

這工作得很好,但我怎麼能確認的myProp.data類型以及?如果我使用PropTypes.shape,那麼我無法檢查myProp本身。

有一個類似的問題here,但它並不完全給出答案這個確切的問題。

回答

1

我很驚訝,沒有看到任何組合形式爲PropTypes

你可以使用一個自定義的驗證:

Container.propTypes = { 
    myProp: function(props, propName, componentName) { 
     if (!propName in props) { 
     return new Error(propName + " is required"); 
     } 
     const value = props[propName]; 
     if (!(value instanceof ResponseState)) { 
     return new Error(propName + " must be an instance of ResponseState"); 
     } 
     if (/*...validate value.data here ...*/) { 
     return new Error(propName + " must have etc. etc."); 
     } 
    } 
}; 
+0

似乎頗重的重量,考慮到我必須這樣做,在一些地方,而數據則是各種形狀的容器不同類...但感謝答案似乎沒有更好的辦法。 –

+0

@IlyaChernomordik:是的。如果你仔細研究了React源代碼,你可以在驗證器中重複使用'PropTypes.instanceOf'和'shape',但是...僅供參考,碰到[this comment](https://github.com/facebook/react/issues/1836#issuecomment-68741246)在ReactJS問題上:*「正在逐步淘汰支持類似Flow的工具。」* –