Reactコンポーネントを視覚的にテストしたい。ユーザーはフォームを使用してコンポーネントの小道具を変更できます。私は、React.PropTypes.oneOf(['green', 'blue', 'yellow'])
に基づいて<select>
をレンダリングできるようにしたいと考えています。抽出/読み取りpropypeに反応する
MyComponent.propTypes
を読むと、Reactで定義された関数が返されます。プロップタイプを抽出/読み込む方法はありますか?
Reactコンポーネントを視覚的にテストしたい。ユーザーはフォームを使用してコンポーネントの小道具を変更できます。私は、React.PropTypes.oneOf(['green', 'blue', 'yellow'])
に基づいて<select>
をレンダリングできるようにしたいと考えています。抽出/読み取りpropypeに反応する
MyComponent.propTypes
を読むと、Reactで定義された関数が返されます。プロップタイプを抽出/読み込む方法はありますか?
あなたは、以来propTypes
から直接読み取ることができません機能として。
代わりにpropTypes
を生成する中間形式でpropTypeを定義することができます。
var myPropTypes = {
color: {
type: 'oneOf',
value: ['green', 'blue', 'yellow'],
},
};
function processPropTypes(propTypes) {
var output = {};
for (var key in propTypes) {
if (propTypes.hasOwnProperty(key)) {
// Note that this does not support nested propTypes validation
// (arrayOf, objectOf, oneOfType and shape)
// You'd have to create special cases for those
output[key] = React.PropTypes[propTypes[key].type](propTypes[key].value);
}
}
return output;
}
var MyComponent = React.createClass({
propTypes: processPropTypes(myPropTypes),
static: {
myPropTypes: myPropTypes,
},
});
その後、MyComponent.myPropTypes
またはelement.type.myPropTypes
を経由して、カスタムpropTypes形式にアクセスすることができました。
このプロセスをやや簡単にするための助けがあります。
function applyPropTypes(myPropTypes, Component) {
Component.propTypes = processPropTypes(myPropTypes);
Component.myPropTypes = propTypes;
}
applyPropTypes(myPropTypes, MyComponent);
私は中間段階が必要ではないことを望んでいましたが、悲しいかな、それは簡単で、簡単で保守的です。 – GijsjanB
もっと良い方法があるといいですね。私たちは実際に私のチームの1つについて考えました。試してみます。それが良いとすれば私はここにフィードバックを与えるでしょう。 – Vadorequest
@ Vadorequestあなたは解決策を考え出すことができますか? –
あなたが行っていることのコード例を追加することがありますが、わかりませんがなぜpropTypeにアクセスしていますか? PropTypesには値は含まれていませんが、コンポーネントに渡されたさまざまな小道具の値の型が何であるかを予測します。
小道具を変更できるフォームをお持ちの場合は、選択コンポーネントをレンダリングするコンポーネントに小道具を渡していると仮定します。これらの小道具は、小道具オブジェクトからアクセスできます。
次を使用することができ、異なる種類の形を持つことができpropTypesを検証しようとしている場合:あなたはそれらが定義されている、言ったように
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message)
])
彼は、コンポーネントのプロパティをエンドユーザに表示するために、Reactコンポーネントの定義済みの「propType」を動的に表示する必要があります。私は実際にドキュメントの目的のために、同じことをしたい。 – Vadorequest
まさに!最近これを調べたり、それをさらに研究したりしていない。 – GijsjanB
は実際に、それは可能です:axe-prop-types
をチェックしてくださいまた、プログラム的に多分 'getDefaultProps'機能を使用して、デフォルトの小道具を読むことができて、本当に興味深いものになるだろう。 – Vadorequest