Ответ 1
static
не был частью последнего поколения Javascript ( "ES5" ), поэтому вы не найдете его в старой документации. Однако он и остальная часть синтаксиса класса ES6 теперь поддерживаются во всех основных браузерах, кроме Internet Explorer (http://caniuse.com/#search=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
При использовании классов ES6 эквивалент Foo.PropTypes = somePropTypes
:
class Foo extends React.Component {
static PropTypes = somePropTypes;
}
В качестве дополнительной заметки способность определять свойства в таком классе не существует в любом браузере (пока): вам нужен транспилер, такой как Babel с плагином transform-class-properties
.