Ist es besser zu definieren, Staat im Konstruktor oder über die Eigenschaft Initialisierungen?
Laut diese babel-Dokumentation für den richtigen Weg, um ES6+ mit Reagieren ist zum ersten Komponenten wie diese:
class Video extends React.Component {
static defaultProps = {
autoPlay: false,
maxLoops: 10,
}
static propTypes = {
autoPlay: React.PropTypes.bool.isRequired,
maxLoops: React.PropTypes.number.isRequired,
posterFrameSrc: React.PropTypes.string.isRequired,
videoSrc: React.PropTypes.string.isRequired,
}
state = {
loopsRemaining: this.props.maxLoops,
}
}
Aber einige offizielle Beispiele, wie Dan Abramov eigenen Reagieren DnD Modul verwendet ES6+ aber immer noch definiert Staat innerhalb des Konstruktors:
constructor(props) {
super(props);
this.moveCard = this.moveCard.bind(this);
this.state = {
//state stuff
}
}
Nun Dan Abramov, wird ein wesentlicher Beitrag zu Reagieren, weiß wahrscheinlich, dass er definieren kann, Stand außerhalb des Konstruktors, aber immer noch entscheidet sich, es zu tun, innerhalb des Konstruktors.
So, ich Frage mich nur, welcher Weg ist besser und warum?
- Es gibt keine schlechte oder gute, sind Sie gleichwertig, das ist eine Frage der Präferenz
- Eigenschaften der Klasse sind ein Vorschlag. Sie sind nicht Teil des ES7. Bitte Lesen Sie die tag-Beschreibung mindestens: ecmascript-7.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, es ist eine Frage der persönlichen Vorliebe. Die transpiled Ausgabe ist die gleiche in Bezug auf die Semantik.
extends React.Component
Sie nicht transpile, um die gleiche Sachethis.state
ändert sich nicht.Sind Sie gleichwertig, weil Feld " Klasse Vorschlag ist syntaktischer Zucker für Konstruktor-Körper-code.
In Fall gibt es keine Notwendigkeit für explizite Konstruktor (anlegen von temporären lokalen Variablen, etc),
constructor
verzichtet werden kann, zugunsten der Klasse Felder.Das problem mit expliziten Konstruktor ist, dass
super
Argumente (props
) werden Häufig weggelassen, die durch Fehler, kann dies zu Problemen führen:Expliziten Konstruktor kann vorteilhaft für die Lesbarkeit. Methoden sind konventionelle unten
constructor
auch Pfeil-Eigenschaften. Dies wird nicht so funktionieren wie Sie sollen, da Klassen-Feldern zugeordnet sind, in der Reihenfolge, wie Sie aufgeführt wurden:In diesem Fall explizite Konstruktor können, führt zu besser lesbarem code:
Dan s code hat tatsächlich einen subtilen Fehler, die ist, warum ich empfehle, mit den Initialisierungen, Wann immer möglich. Reagieren Komponente Konstruktoren nimmt zwei Argumente - Requisiten und Rahmen. Er ist nicht der übergabe an den Eltern-Konstruktor und es könnte leicht übersehen werden, durch einige andere Entwickler, die es benötigt.Manchmal haben Sie keine Wahl, wie bei der Initialisierung hängt der Konstruktor Argumente, so denken Sie daran, zu geben all die Argumente der Eltern.Nach dem Versuch ein paar Sachen, die aussieht wie Reagieren nicht die Frage, die ich dachte. Sie weitergeben können, was Sie wollen, um die parent-Konstruktor, und es wird in Ordnung sein. E. g.:
Ich noch empfehlen, mit den Initialisierungen als nicht zum Aufruf des übergeordneten Konstruktors ist eine Sache weniger zu denken.