如何检查哪些额外的道具被传递到未定义的反应组件?

时间:2018-03-14 14:43:13

标签: reactjs jsx

我想知道是否可以使用:this["__proto__"]["constructor"]["propTypes"]

访问React组件类中定义的PropTypes

例如,如果我有这个组件:

class Hello extends React.Component {
  static propTypes = {
    name: string
  };

  render() {
    console.log(this.props);
    console.log(this["__proto__"]["constructor"]["propTypes"]);
    return <h1>Hello {this.props.name}!</h1>;
  }
}

一个用例是,如果我想检查哪些额外的道具被传递到未明确定义的组件中。

要明确的是,上面的工作,更重要的是这是否是应该避免的事情 - 我知道这可能是一个有点自以为是的问题,但我还没有在其他任何地方看到它,所以,想一想我想寻找一些反馈。如果应该避免有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

不建议直接使用__proto__访问对象原型,因为此属性从未成为ECMAString标准的一部分。主要供应商已经实施它,现在它可能适用于您的React应用程序所针对的所有环境。

通常替换它是Object.getPrototypeOf()方法,您可以使用相同的方法:

Object.getPrototypeOf(this).constructor.propTypes

但无论如何,您可以直接读取该类的静态属性:

render() {
  console.log(Hello.propTypes);
  return <h1>Hello {this.props.name}!</h1>;
}

更喜欢这个。