Extract/read 反应 propTypes
Extract/read React propTypes
我想直观地测试 React 组件。用户可以使用表单更改组件的道具。我希望能够(例如)根据 React.PropTypes.oneOf(['green', 'blue', 'yellow'])
.
渲染 <select>
当我阅读 MyComponent.propTypes
时,它返回一个由 React 定义的函数。有没有办法 extract/read 道具类型?
也许可以添加一个代码示例来说明您正在尝试做什么,我不太明白,但是您为什么要访问 propTypes? PropTypes 不包含值,而是对传递到组件中的不同道具的值类型的期望。
如果您有一个允许您更改道具的表单,我假设您将道具传递到将呈现的组件中 select component.You 可以通过道具对象访问这些道具。
如果您尝试验证可以具有不同类型形式的 propTypes,可以使用以下方法:
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message)
])
您不能直接从 propTypes
读取,因为正如您所说,它们被定义为函数。
您可以改为以中间格式定义您的 propTypes,您可以从中生成 propTypes
静态文件。
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);
看看:https://www.npmjs.com/package/axe-prop-types 这将允许您提取所有道具类型
我想直观地测试 React 组件。用户可以使用表单更改组件的道具。我希望能够(例如)根据 React.PropTypes.oneOf(['green', 'blue', 'yellow'])
.
<select>
当我阅读 MyComponent.propTypes
时,它返回一个由 React 定义的函数。有没有办法 extract/read 道具类型?
也许可以添加一个代码示例来说明您正在尝试做什么,我不太明白,但是您为什么要访问 propTypes? PropTypes 不包含值,而是对传递到组件中的不同道具的值类型的期望。
如果您有一个允许您更改道具的表单,我假设您将道具传递到将呈现的组件中 select component.You 可以通过道具对象访问这些道具。
如果您尝试验证可以具有不同类型形式的 propTypes,可以使用以下方法:
optionalUnion: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
React.PropTypes.instanceOf(Message)
])
您不能直接从 propTypes
读取,因为正如您所说,它们被定义为函数。
您可以改为以中间格式定义您的 propTypes,您可以从中生成 propTypes
静态文件。
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);
看看:https://www.npmjs.com/package/axe-prop-types 这将允许您提取所有道具类型