反应:为什么静态propTypes

BAE*_*BAE 45 reactjs redux react-proptypes

我正在寻找redux todomvc代码.什么是static在关键字static propTypes?谢谢

UPDATE

不知道为什么会投票?这篇文章太简单了吗?欢迎评论.谢谢.我希望我能删除这篇文章.

mac*_*ost 35

static不是上一代Javascript("ES5")的一部分,这就是为什么你不会在旧文档中找到它.然而,除了Internet Explorer(http://caniuse.com/#search=es6)之外,所有主流浏览器都支持其余的"ES6"类语法,如果您使用像Babel这样的转换器,则可以使用它在任何浏览器中.大多数React用户已经在使用Babel来转换他们的JSX,因此React站点(如Redux TodoMVC)认为它是理所当然的.您可以static在这里阅读更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static.

在这种情况下static propTypes,propTypes需要在类本身上声明,而不是在类的实例上声明.换句话说,如果您使用无状态组件:

function Foo() { 
    this.PropTypes = somePropTypes; // bad
    return <div></div>;
}
Foo.PropTypes = somePropTypes; // good
Run Code Online (Sandbox Code Playgroud)

使用ES6类时,相当于Foo.PropTypes = somePropTypes:

class Foo extends React.Component {
    static PropTypes = somePropTypes;
}
Run Code Online (Sandbox Code Playgroud)

作为旁注,在类似的类中定义属性的能力在任何浏览器中都不存在(还有):你需要一个像transform-class-properties插件的Babel这样的转换器.


Jus*_*ner 12

propTypes对于组件的实例而言并不是唯一的.它们也不会改变每个组件.因此,他们成为班级的静态成员是有道理的.