Reactjs 提取/读取属性类型

Reactjs 提取/读取属性类型,reactjs,react-proptypes,Reactjs,React Proptypes,我想直观地测试React组件。用户可以使用表单更改组件的道具。我希望能够(例如)基于(['green','blue','yellow'])中的React.PropTypes.one呈现 当我读取MyComponent.propTypes时,它返回一个由React定义的函数。有没有办法提取/读取道具类型?也许可以添加一个代码示例,说明您正在尝试做什么,因为我不太明白,但为什么要访问道具类型?PropTypes不包含值,而是对传递到组件中的不同props的值类型的期望 如果您有一个表单,允许您更改道

我想直观地测试React组件。用户可以使用表单更改组件的道具。我希望能够(例如)基于(['green','blue','yellow'])中的
React.PropTypes.one呈现


当我读取MyComponent.propTypes时,它返回一个由React定义的函数。有没有办法提取/读取道具类型?

也许可以添加一个代码示例,说明您正在尝试做什么,因为我不太明白,但为什么要访问道具类型?PropTypes不包含值,而是对传递到组件中的不同props的值类型的期望

如果您有一个表单,允许您更改道具,我假设您正在将道具传递到将呈现选择组件的组件中。您可以通过道具对象访问这些道具

如果您试图验证具有不同类型形式的PropType,可以使用以下方法:

optionalUnion: React.PropTypes.oneOfType([
  React.PropTypes.string,
  React.PropTypes.number,
  React.PropTypes.instanceOf(Message)
])

您不能直接从
propTypes
读取,因为正如您所说,它们被定义为函数

您可以用中间格式定义propTypes,从中生成
propTypes
static

var myPropTypes={
颜色:{
键入:“其中一个”,
值:[“绿色”、“蓝色”、“黄色”],
},
};
函数processPropTypes(propTypes){
var输出={};
for(propTypes中的var键){
if(propTypes.hasOwnProperty(键)){
//请注意,这不支持嵌套的propTypes验证
//(排列、对象、类型和形状之一)
//你必须为这些创造特殊的案例
输出[key]=React.PropTypes[PropTypes[key].type](PropTypes[key].value);
}
}
返回输出;
}
var MyComponent=React.createClass({
propTypes:processPropTypes(myPropTypes),
静态:{
myPropTypes:myPropTypes,
},
});
然后,您可以通过
MyComponent.myPropTypes
element.type.myPropTypes
访问自定义的propTypes格式

这里有一个助手可以让这个过程变得更简单

函数applyPropTypes(myPropTypes,组件){
Component.propTypes=processPropTypes(myPropTypes);
Component.myPropTypes=propTypes;
}
applyPropTypes(myPropTypes、MyComponent);

查看:这将允许您提取所有道具类型

他希望动态显示React组件定义的
道具类型
,以便向最终用户显示组件的属性。实际上,我也想做同样的事情,为了文档的目的。完全正确!最近还没有研究过这个问题,也没有进一步研究过。通过编程,使用maybe
getDefaultProps
函数阅读默认道具也会非常有趣。实际上,这是可能的:斧头道具类型-我希望中间步骤不是必需的,但是,唉,它清晰、容易和可维护,那为什么不。。。谢谢。我希望有更好的办法。事实上,我们在我的团队中考虑过一个,我们会尝试的。如果更好的话,我会在这里给出反馈。@Vadorequest你能想出一个解决方案吗?@DanLee Nope。应用Alexandre的解决方案在当时耗费了太多的时间,所以我忘了它。但在我看来,这是最接近的解决方案,我不喜欢的是使用新方法更新所有组件的必要性。我希望React能在某个时候提供一些东西。你可以使用npmjs.com/package/axe-prop-types