获取reactjs中组件的可选道具列表

时间:2017-10-10 14:13:22

标签: javascript reactjs ecmascript-6

有没有办法获取引用可选属性的任何propTypes的密钥(即未指定为必需属性)?

例如,给出以下道具:

TestComponent.propTypes = {
    requiredProp: PropTypes.string.isRequired,
    optionalProp: PropTypes.func,
    optionalProp2: PropTypes.element
}

...我可以获得包含项目的数组:["optionalProp", "optionalProp2"]

如果没有内置方法可以做到这一点,那么是否有一个优雅的解决方案:

  1. 避免对其列表进行硬编码
  2. 在实现此功能的情况下避免从自定义类派生
  3. 可以在我的所有反应组件中使用
  4. 我正在考虑使用上下文来定义这样的函数,然后在当前组件上调用它,如下所示:this.context.getOptionalProps.call(this)

    但这似乎是对上下文的错误使用。

1 个答案:

答案 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应用程序中的任何位置使用。