2016-11-09 2 views
24

Я смотрю redux todomvc codes. Что является ключевым словом static в static propTypes? Благодаряреакция: почему static propTypes

UPDATE

Понятия не имею, почему downvoted? Эта статья слишком проста? Комментарии приветствуются. Благодарю. Надеюсь, я смогу удалить этот пост.

+2

«Надеюсь, я смогу удалить этот пост». Вам не нужно. Нападение на ваш счет из трех отрицательных голосов незначительно, и только потому, что трем людям не понравился ваш вопрос, это не значит, что другие люди не найдут этот вопрос полезным. Любой, кто использовал SO на некоторое время, имеет по крайней мере один вопрос, который им немного неловко спрашивать (включая меня), но весь смысл этого места - помочь людям учиться, и даже «плохие» вопросы могут это сделать. – machineghost

+0

@machineghost Спасибо. На самом деле, я прочитал несколько javascript-документов. Я не нашел свойство 'static'. Возможно, я не внимательно прочитал документы. конечно, 'static' очень часто встречается на других языках. – BAE

ответ

15

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.

8

propTypes не являются уникальными для экземпляра компонента. Они также не меняются на один компонент. Поэтому для них имеет смысл быть статическим членом класса.

Смежные вопросы