2016-12-02 1 views
1

私はこのようなクラスがあります。Propのクラスとそれのクラス(ネストされたオブジェクト)のクラスをReactで検証する方法は?

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ソースを掘り下げてみると、Validatorで 'PropTypes.instanceOf'と' shape'を再利用することができますが... FYIは、[このコメント](https://github.com/facebook/react/issues/1836#issuecomment-68741246)、ReactJSの問題:* "ProptypesはFlowのようなツールのために段階的に廃止されています。" * –

関連する問題