有没有办法获取引用可选属性的任何propTypes
的密钥(即未指定为必需属性)?
例如,给出以下道具:
TestComponent.propTypes = {
requiredProp: PropTypes.string.isRequired,
optionalProp: PropTypes.func,
optionalProp2: PropTypes.element
}
...我可以获得包含项目的数组:["optionalProp", "optionalProp2"]
如果没有内置方法可以做到这一点,那么是否有一个优雅的解决方案:
我正在考虑使用上下文来定义这样的函数,然后在当前组件上调用它,如下所示:this.context.getOptionalProps.call(this)
但这似乎是对上下文的错误使用。
答案 0 :(得分:3)
process.env.NODE_ENV !== 'production'
谨慎使用或不使用未经过彻底测试,但我设法过滤掉了所需的道具键,并获得了一系列可选道具:
/**
* Given a PropTypes Object returns an array of optional
* prop keys.
*
* @param propTypes
*/
const optionalProps = propTypes => Object.keys(propTypes).filter(k => propTypes[k].isRequired);
// console.log(optionalProps(TestComponent.PropTypes) output:
// Array [
// "optionalProp",
// "optionalProp2",
// ]
然后只需将其导出并导入以便在React应用程序中的任何位置使用。