2016-09-13 9 views
3

空配列[]は、文字列要素が必須であると宣言していますが、次のPropTypes定義を渡します。一方arrayOfの必須要素が正しく動作していないため、React PropTypeの検証

{ 
    a: React.PropTypes.arrayOf(
     React.PropTypes.string.isRequired 
    ).isRequired 
} 

、空のオブジェクトは、{}以下propTypes定義を通過しない:

{ 
    a: React.PropTypes.shape({ 
     x: PropTypes.string.isRequired 
    }).isRequired 
} 

アレイ検証が正しく動作しないことと思われます。何か案は?

答えて

3

カスタムバリデータを利用できます。私はあなたがstring.isRequiredを実装することができるとは思わない項目がない場合はarrayOf .. arrayOfのカスタムバリデータがどのように動作するかを判断すると、各キーのコールバックを呼び出すようです。したがって、値にキーがない場合、バリデータは呼び出されません。

(注、これはテストされていない)

a: function(props, propName, componentName) { 
    var errorCount = 0 
    var prop = props[propName] 
    // ensure it is an array 
    if (typeof prop !== 'array') { 
    errorCount++ 
    } 
    // ensure array has items 
    else if (prop.length == 0) { 
    errorCount++ 
    } 
    // ensure all items are strings 
    else { 
    for (var i = 0; i < prop.length; i++) { 
     if (typeof prop[i] !== 'string') errorCount++ 
    } 
    } 
    // throw error 
    if (errorCount > 0) { 
    return new Error(
     'Invalid prop `' + propName + '` supplied to' + 
     ' `' + componentName + '`. Validation failed.' 
    ); 
    } 
関連する問題