回答:
を使用React.PropTypes.shape
してプロパティを検証できます。
propTypes: {
data: React.PropTypes.shape({
id: React.PropTypes.number.isRequired,
title: React.PropTypes.string
})
}
更新
@Chrisがコメントで指摘したように、Reactバージョン15.5.0以降React.PropTypes
はpackageに移動しましたprop-types
。
import PropTypes from 'prop-types';
propTypes: {
data: PropTypes.shape({
id: PropTypes.number.isRequired,
title: PropTypes.string
})
}
React.PropTypes.shape
必要なタイプチェックのレベルが得られない場合は、tcomb-reactを確認してください。
Reactのカスタムバリデーターの定義のサポートを利用し、tcomb-validationを使用して検証を実行することによりtoPropTypes()
、tcombライブラリーで定義されたスキーマを検証できる関数を提供します。propTypes
// define the component props
var MyProps = struct({
foo: Num,
bar: subtype(Str, function (s) { return s.length <= 3; }, 'Bar')
});
// a simple component
var MyComponent = React.createClass({
propTypes: toPropTypes(MyProps), // <--- !
render: function () {
return (
<div>
<div>Foo is: {this.props.foo}</div>
<div>Bar is: {this.props.bar}</div>
</div>
);
}
});
ネストは1レベルを超えて機能することに注意してください。これは、URLパラメータを検証するときに私に役立ちました。
propTypes = {
match: PropTypes.shape({
params: PropTypes.shape({
id: PropTypes.string.isRequired
})
})
};
id
がある場合にのみ必要とされるmatch.params
オブジェクトがたりないisRequired
カスケードを意味する、match
とIsRequiredこのparams
持つオブジェクトid
小道具?つまり、パラメータが指定されていない場合でも有効ですか?
match
持っている必要がありますparams
し、params
持っている必要がありますid
」。
match
が存在し、If match
が含まれparams
ている場合params
、文字列を含む必要がありますid
。
user: React.PropTypes.shap({
age: (props, propName) => {
if (!props[propName] > 0 && props[propName] > 100) {
return new Error(`${propName} must be betwen 1 and 99`)
}
return null
},
})