web-dev-qa-db-fra.com

réagir: pourquoi les propTypes statiques

Je regarde les codes redux todomvc . Quel est le mot clé static dans static propTypes? Merci

[~ # ~] mise à jour [~ # ~]

Aucune idée pourquoi a voté contre? Ce post est-il trop simple? Les commentaires sont les bienvenus. Merci. J'espère pouvoir supprimer ce post.

45
BAE

static ne faisait pas partie de la dernière génération de Javascript ("ES5"), c'est pourquoi vous ne le trouverez pas dans les anciennes documentations. Cependant, elle et le reste de la syntaxe de classe "ES6" sont désormais pris en charge dans tous les principaux navigateurs à l'exception d'Internet Explorer ( http://caniuse.com/#search=es6 ), et si vous utilisez un transpiler comme Babel vous pouvez l'utiliser dans n'importe quel navigateur. La plupart des utilisateurs de React utilisent déjà Babel pour transpiler leur JSX, donc React sites (comme Redux TodoMVC) le tiennent pour acquis. Vous pouvez en savoir plus sur static ici https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static .

Dans le cas de static propTypes, les propTypes doivent être déclarés sur la classe elle-même, pas sur l'instance de la classe. En d'autres termes, si vous utilisez des composants sans état:

function Foo() { 
    this.PropTypes = somePropTypes; // bad
    return <div></div>;
}
Foo.PropTypes = somePropTypes; // good

Lorsque vous utilisez des classes ES6, l'équivalent de Foo.PropTypes = somePropTypes est:

class Foo extends React.Component {
    static PropTypes = somePropTypes;
}

En remarque, la possibilité de définir des propriétés dans une classe comme celle-ci n'existe pas (encore) dans aucun navigateur: vous avez besoin d'un transpilateur tel que Babel avec le transform-class-properties brancher.

35
machineghost

propTypes ne sont pas uniques à une instance du composant. Ils ne changent pas non plus par composant. Par conséquent, il est logique pour eux d'être un membre statique de la classe.

12
Justin Niessner