Was macht der ...
in diesem React-Code (mit JSX) und wie heißt er?
<Modal {...this.props} title='Modal heading' animation={false}>
javascript
reactjs
Thomas Johansen
quelle
quelle
...
Bediener verhält sich in verschiedenen Kontexten unterschiedlich. In diesem Zusammenhang ist es der "Spread" -Operator, der unten von @TJ Crowder beschrieben wird. In einem anderen Kontext könnte dies auch der unten von @Tomas Nikodym beschriebene "Rest" -Operator sein.Antworten:
Das ist die Notationsverteilung . Es wurde in ES2018 hinzugefügt (Spread für Arrays / Iterables war früher, ES2015), aber es wurde in React-Projekten lange Zeit über Transpilation unterstützt (als " JSX-Spread-Attribute ", obwohl Sie es auch anderswo tun könnten, nicht nur für Attribute ).
{...this.props}
verteilt die "eigenen" aufzählbaren Eigenschaftenprops
als diskrete Eigenschaften auf dasModal
Element, das Sie erstellen. Zum Beispiel, wennthis.props
enthalten,a: 1
undb: 2
dannwäre das gleiche wie
Aber es ist dynamisch, so dass alle "eigenen" Eigenschaften enthalten
props
sind.Da
children
es sich um eine "eigene" Immobilie handeltprops
, wird diese in der Verbreitung enthalten sein. Wenn die Komponente, in der dies angezeigt wird, untergeordnete Elemente enthält, werden diese an weitergeleitetModal
. Das Einfügen von untergeordneten Elementen zwischen dem öffnenden und dem schließenden Tag ist nur syntaktischer Zucker - die gute Art -, um einechildren
Eigenschaft in das öffnende Tag einzufügen. Beispiel:Code-Snippet anzeigen
Die Spread-Notation ist nicht nur für diesen Anwendungsfall praktisch, sondern auch zum Erstellen eines neuen Objekts mit den meisten (oder allen) Eigenschaften eines vorhandenen Objekts. Dies tritt häufig auf, wenn Sie den Status aktualisieren, da Sie den Status nicht ändern können direkt:
Dies wird
this.state.foo
durch ein neues Objekt mit denselben Eigenschaften ersetzt, mitfoo
Ausnahme dera
Eigenschaft, die Folgendes wird"updated"
:Code-Snippet anzeigen
quelle
children
Eigenschaft oder werden sie kombiniert?children
. Experimente haben ergeben, dass die Kinder, die Sie über ein Attribut namenschildren
aufrufen, durch die Attribute ersetzt werden, die Sie zwischen den Start- und End-Tags angegeben haben. Wenn es sich jedoch um ein undefiniertes Verhalten handelt, würde ich mich sicher nicht darauf verlassen.Wie Sie wissen,
...
werden Spread-Attribute genannt, die der Name darstellt, mit dem ein Ausdruck erweitert werden kann.Und in diesem Fall (ich werde es vereinfachen).
Diese:
entspricht
Kurz gesagt, es ist eine nette Abkürzung, können wir sagen .
quelle
Die drei Punkte repräsentieren den Spread Operator in ES6. Es erlaubt uns, einige Dinge in Javascript zu tun:
Arrays verketten
Ein Array zerstören
Zwei Objekte kombinieren
Es gibt eine andere Verwendung für die drei Punkte, die als Rest-Parameter bekannt ist, und es ermöglicht, alle Argumente einer Funktion in einem Array zusammenzufassen.
Funktionsargumente als Array
quelle
Die drei Punkte in JavaScript sind Spread / Rest-Operatoren .
Spread-Operator
Die Spread-Syntax ermöglicht die Erweiterung eines Ausdrucks an Stellen, an denen mehrere Argumente erwartet werden.
Ruheparameter
Die Rest Parametersyntax ist für Funktionen mit variable Anzahl von Argumenten verwendet.
Der Spread / Rest-Operator für Arrays wurde in ES6 eingeführt. Es gibt einen State 2- Vorschlag für Objektverteilungs- / Ruheeigenschaften.
TypeScript unterstützt auch die Spread-Syntax und kann diese mit kleineren Problemen in ältere Versionen von ECMAScript übertragen .
quelle
Dies ist eine Funktion von ES6, die auch in React verwendet wird. Schauen Sie sich das folgende Beispiel an:
Dieser Weg ist in Ordnung, wenn wir maximal 3 Parameter haben. Was aber, wenn wir zum Beispiel 110 Parameter hinzufügen müssen? Sollten wir sie alle definieren und einzeln hinzufügen?
Natürlich gibt es einen einfacheren Weg, der SPREAD heißt . Anstatt alle diese Parameter zu übergeben, schreiben Sie:
Wir haben keine Ahnung, wie viele Parameter wir haben, aber wir wissen, dass es Haufen davon gibt. Basierend auf ES6 können wir die obige Funktion wie folgt umschreiben und die Verteilung und Zuordnung zwischen ihnen verwenden, um es so einfach wie ein Kinderspiel zu machen:
quelle
In JSX werden Requisiten für Sie nur anders definiert !
...
In ES6 werden Array- und Objektoperatoren verwendet (Objekt 1 wird noch nicht vollständig unterstützt). Wenn Sie also Ihre Requisiten bereits definiert haben, können Sie sie auf diese Weise an Ihr Element übergeben.In Ihrem Fall sollte der Code also ungefähr so aussehen:
Die von Ihnen definierten Requisiten sind jetzt getrennt und können bei Bedarf wiederverwendet werden.
Es ist gleich:
Dies sind die Zitate des React-Teams zum Spread-Operator in JSX:
quelle
Für diejenigen, die aus der Python-Welt stammen, entsprechen JSX-Spread-Attribute dem Entpacken von Argumentlisten (dem Python-
**
Operator).Ich bin mir bewusst, dass dies eine JSX-Frage ist, aber die Arbeit mit Analogien hilft manchmal, sie schneller zu bekommen.
quelle
Der
...
(Spread-Operator) wird verwendet, um auf Folgendes zu reagieren:bieten eine saubere Möglichkeit, Requisiten von übergeordneten an untergeordnete Komponenten weiterzugeben. zB gegeben diese Requisiten in einer übergeordneten Komponente,
Sie könnten auf folgende Weise an das Kind weitergegeben werden:
das ist ähnlich
aber viel sauberer.
quelle
Drei Punkte stehen
...
für Spread-Operatoren oder Ruheparameter .Damit kann ein Array-Ausdruck oder eine Zeichenfolge oder alles, was iteriert werden kann, an Stellen erweitert werden, an denen null oder mehr Argumente für Funktionsaufrufe oder Elemente für ein Array erwartet werden.
Beachten Sie, dass
foo
Eigentum von obj1 wird von obj2 überschrieben wordenfoo
EigenschaftHinweis: Die Spread-Syntax (außer bei Spread-Eigenschaften) kann nur auf iterierbare Objekte angewendet werden: Im Folgenden wird ein Fehler ausgegeben
Referenz1
Referenz2
quelle
Ein großes Lob an Brandon Morelli. Er hat es hier perfekt erklärt , aber Links können sterben, also füge ich nur den folgenden Inhalt ein:
Die Spread-Syntax besteht einfach aus drei Punkten:
...
Sie ermöglicht es einem Iterable, an Stellen zu expandieren, an denen 0+ Argumente erwartet werden. Definitionen sind ohne Kontext schwierig. Lassen Sie uns einige verschiedene Anwendungsfälle untersuchen, um zu verstehen, was dies bedeutet.Beispiel 1 - Einfügen von Arrays Sehen Sie sich den folgenden Code an. In diesem Code verwenden wir nicht die Spread-Syntax:
Oben haben wir ein Array mit dem Namen erstellt
mid
. Wir erstellen dann ein zweites Array, das unsermid
Array enthält . Schließlich melden wir das Ergebnis ab. Was erwarten Siearr
zu drucken? Klicken Sie oben auf Ausführen, um zu sehen, was passiert. Hier ist die Ausgabe:Ist das das Ergebnis, das Sie erwartet haben? Durch das Einfügen des
mid
Arrays in dasarr
Array haben wir ein Array innerhalb eines Arrays erhalten. Das ist in Ordnung, wenn das das Ziel war. Aber was ist, wenn Sie nur ein einziges Array mit den Werten 1 bis 6 möchten? Um dies zu erreichen, können wir die Spread-Syntax verwenden! Denken Sie daran, dass die Spread-Syntax die Erweiterung der Elemente unseres Arrays ermöglicht. Schauen wir uns den folgenden Code an. Alles ist gleich - außer dass wir jetzt die Spread-Syntax verwenden, um dasmid
Array in dasarr
Array einzufügen :Und wenn Sie den Run-Button drücken, ist hier das Ergebnis:
Genial! Erinnern Sie sich an die Spread-Syntax-Definition, die Sie gerade oben gelesen haben? Hier kommt es ins Spiel. Wie Sie sehen können , wird das Array erweitert , wenn wir das
arr
Array erstellen und den Spread-Operator für dasmid
Array verwenden, anstatt nur eingefügt zu werdenmid
. Diese Erweiterung bedeutet, dass jedes einzelne Element immid
Array in das Array eingefügt wirdarr
. Anstelle von verschachtelten Arrays ist das Ergebnis ein einzelnes Array von Zahlen im Bereich von 1 bis 6.Beispiel 2 - Mathematik JavaScript verfügt über ein integriertes Mathematikobjekt, mit dem wir einige unterhaltsame mathematische Berechnungen durchführen können. In diesem Beispiel werden wir uns ansehen
Math.max()
. Wenn Sie nicht vertraut sind, wirdMath.max()
die größte von null oder mehr Zahlen zurückgegeben. Hier einige Beispiele:Wie Sie sehen können,
Math.max()
sind mehrere Parameter erforderlich , wenn Sie den Maximalwert mehrerer Zahlen ermitteln möchten . Sie können leider nicht einfach ein einzelnes Array als Eingabe verwenden. Vor der Spread-Syntax ist die VerwendungMath.max()
in einem Array am einfachsten.apply()
Es funktioniert, es ist nur wirklich nervig. Schauen Sie sich nun an, wie wir genau dasselbe mit der Spread-Syntax machen:
Anstatt eine Funktion erstellen und die Methode apply verwenden zu müssen, um das Ergebnis von zurückzugeben
Math.max()
, benötigen wir nur zwei Codezeilen! Die Spread-Syntax erweitert unsere Array-Elemente und gibt jedes Element in unserem Array einzeln in dieMath.max()
Methode ein!Beispiel 3 - Kopieren eines Arrays In JavaScript können Sie ein Array nicht einfach kopieren, indem Sie eine neue Variable festlegen, die dem bereits vorhandenen Array entspricht. Betrachten Sie das folgende Codebeispiel:
Wenn Sie auf Ausführen klicken, wird die folgende Ausgabe angezeigt:
Auf den ersten Blick sieht es so aus, als hätte es funktioniert - es sieht so aus, als hätten wir die Werte von arr in arr2 kopiert. Aber das ist nicht passiert. Sie sehen, wenn Sie mit Objekten in Javascript arbeiten (Arrays sind ein Objekttyp), weisen wir sie als Referenz und nicht als Wert zu. Dies bedeutet, dass arr2 derselben Referenz wie arr zugewiesen wurde. Mit anderen Worten, alles, was wir mit arr2 tun, wirkt sich auch auf das ursprüngliche arr-Array aus (und umgekehrt). Schauen Sie unten nach:
Oben haben wir ein neues Element d in arr2 verschoben. Wenn wir jedoch den Wert von arr abmelden, werden Sie sehen, dass der d-Wert auch zu diesem Array hinzugefügt wurde:
Kein Grund zur Angst! Wir können den Spread-Operator verwenden! Betrachten Sie den folgenden Code. Es ist fast das gleiche wie oben. Stattdessen haben wir den Spread-Operator in zwei eckigen Klammern verwendet:
Wenn Sie auf "Ausführen" klicken, wird die erwartete Ausgabe angezeigt:
Oben wurden die Array-Werte in arr zu einzelnen Elementen erweitert, die dann arr2 zugewiesen wurden. Wir können jetzt das arr2-Array so oft ändern, wie wir möchten, ohne dass dies Auswirkungen auf das ursprüngliche arr-Array hat:
Der Grund dafür ist wiederum, dass der Wert von arr erweitert wird, um die Klammern unserer arr2-Array-Definition zu füllen. Daher setzen wir arr2 so, dass es den einzelnen Werten von arr entspricht, anstatt wie im ersten Beispiel auf arr zu verweisen.
Bonusbeispiel - String zu Array Als unterhaltsames letztes Beispiel können Sie die Spread-Syntax verwenden, um einen String in ein Array zu konvertieren. Verwenden Sie einfach die Spread-Syntax in eckigen Klammern:
quelle
Die drei Punkte
(...)
werden als Spread-Operator bezeichnet. Dies ähnelt konzeptionell dem ES6-Array-Spread-Operator. JSX nutzt diese unterstützten und sich entwickelnden Standards, um eine sauberere Syntax in JSX bereitzustellenReferenz:
1) https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties
2) https://facebook.github.io/react/docs/jsx-spread.html
quelle
Die Bedeutung von ... hängt davon ab, wo Sie es im Code verwenden.
quelle
Dies ist ein Spread-Operator ...
Zum Beispiel, wenn Sie ein Array
first=[1,2,3,4,5]
und ein anderes habensecond=[6,7,8]
.[...first, ...second] //result is [1,2,3,4,5,6,7,8]
Das gleiche kann auch mit json-Objekten gemacht werden.
quelle
Kurz gesagt, die drei Punkte
...
sind ein Spread-Operator in ES6 (ES2015). Der Spread-Operator ruft alle Daten ab.Gibt das Ergebnis [1,2,3,4,5,6]
Gibt das Ergebnis [7,8,1,2,3,4]
quelle
Wird normalerweise als Spread-Operator bezeichnet und dient zum Erweitern, wo immer dies erforderlich ist
Beispiel
Sie können dies verwenden, wo immer Sie es benötigen. Weitere Informationen zur Spread-Operator- Spread-Syntax .
quelle
quelle
... diese Syntax ist Teil von ES6 und nicht etwas, das Sie nur in React verwenden können. Sie kann auf zwei verschiedene Arten verwendet werden. als Spread-Operator ODER als Rest-Parameter. Weitere Informationen finden Sie in diesem Artikel: https://www.techiediaries.com/react-spread-operator-props-setstate/
Was Sie in der Frage erwähnt haben, ist so etwas. Nehmen wir an, so
Mit dem Spread-Operator können Sie Requisiten wie folgt an die Komponente übergeben.
quelle
Es ist üblich, Requisiten in einer React-Anwendung weiterzugeben. Auf diese Weise können wir Statusänderungen auf die untergeordnete Komponente anwenden, unabhängig davon, ob sie rein oder unrein ist (zustandslos oder zustandsbehaftet). Es gibt Zeiten, in denen der beste Ansatz beim Übergeben von Requisiten darin besteht, einzelne Eigenschaften oder ein ganzes Objekt von Eigenschaften zu übergeben. Mit der Unterstützung für Arrays in ES6 erhielten wir die Notation "..." und damit können wir nun ein ganzes Objekt an ein Kind übergeben.
Der typische Prozess der Weitergabe von Requisiten an ein Kind wird mit folgender Syntax beschrieben:
Dies ist in Ordnung, wenn die Anzahl der Requisiten minimal ist, wird jedoch nicht mehr handhabbar, wenn die Anzahl der Requisiten zu hoch wird. Ein Problem mit dieser Methode tritt auf, wenn Sie die in einer untergeordneten Komponente erforderlichen Eigenschaften nicht kennen und die typische JavaScript-Methode darin besteht, diese Eigenschaften einfach festzulegen und später an das Objekt zu binden. Dies führt zu Problemen bei der PropType-Überprüfung und zu Fehlern bei der Verfolgung kryptischer Stapel, die nicht hilfreich sind und zu Verzögerungen beim Debuggen führen. Das Folgende ist ein Beispiel für diese Praxis und was nicht zu tun ist:
Das gleiche Ergebnis kann jedoch mit angemessenerem Erfolg erzielt werden:
Verwendet jedoch weder JSX-Spread noch JSX, um dies wieder in die Gleichung einzuschleifen, können wir jetzt so etwas tun:
Die in "... Requisiten" enthaltenen Eigenschaften sind foo: x, bar: y. Dies kann mit anderen Attributen kombiniert werden, um die Eigenschaften von "... Requisiten" mithilfe dieser Syntax zu überschreiben:
Außerdem können wir andere Eigenschaftsobjekte aufeinander kopieren oder auf folgende Weise kombinieren:
Oder führen Sie zwei verschiedene Objekte wie dieses zusammen (dies ist noch nicht in allen Reaktionsversionen verfügbar):
Eine andere Möglichkeit, dies zu erklären, ist laut Facebooks React / Docs-Site:
Wenn Sie bereits "Requisiten" als Objekt haben und diese in JSX übergeben möchten, können Sie "..." als SPREAD-Operator verwenden, um das gesamte Requisitenobjekt zu übergeben. Die folgenden zwei Beispiele sind äquivalent:
Spread-Attribute können nützlich sein, wenn Sie generische Container erstellen. Sie können Ihren Code jedoch auch unübersichtlich machen, indem sie es einfach machen, viele irrelevante Requisiten an Komponenten zu übergeben, die sich nicht um sie kümmern. Diese Syntax sollte sparsam verwendet werden.
quelle
Es heißt Spread-Operator. Zum Beispiel let hello = {name: '', msg: ''} let hello1 = {... hello} Jetzt werden die Objekteigenschaften von hello nach hello1 kopiert.
quelle
Es heißt Spreads-Syntax in Javascript.
Es wird zum Destrukturieren eines Arrays oder Objekts in Javascript verwendet.
Beispiel:
Sie können das gleiche Ergebnis mit der
Object.assign()
Funktion in Javascript erzielen.Referenz: Spread- Syntax
quelle
Dies wird zusammengestellt in:
wo es mehr zwei Eigenschaften gibt
title
&animation
jenseitsprops
des Host-Elements hat....
ist der ES6-Operator namens Spread .Siehe https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
quelle
Spread-Operator (Triple-Operator) in Ecama-Skript 6 (ES6) einführen. Ecama-Skript (ES6) ist ein Wrapper von Javascript.
Verbreiten Sie Operator Aufzählbare Eigenschaften in Requisiten. this.props = {Vorname: 'Dan', Nachname: 'Abramov', Stadt: 'New York', Land: 'USA'}
Der Hauptmerkmal-Spread-Operator wird jedoch für einen Referenztyp verwendet.
Dies wird als Referenztyp bezeichnet. Ein Objekt wirkt sich auf andere Objekte aus, da diese im Speicher gemeinsam genutzt werden können. Wenn Sie einen unabhängigen Wert für den Spread-Speicher erhalten, verwenden beide den Spread-Operator.
quelle
Wenn Sie ein Array von Elementen haben und die Elemente anzeigen möchten, die Sie gerade verwenden ... Array-Elemente, werden alle Elemente durchlaufen
quelle
...
(drei Punkte in Javascript) wird als Spread-Syntax oder Spread-Operator bezeichnet. Auf diese Weise kann ein iterierbarer Ausdruck wie ein Array- Ausdruck oder eine Zeichenfolge oder ein Objektausdruck an einer beliebigen Stelle erweitert werden. Dies ist nicht spezifisch für React. Es ist ein Javascript-Operator.Alle diese Antworten hier sind hilfreich, aber ich möchte die am häufigsten verwendeten praktischen Anwendungsfälle der Spread-Syntax (Spread-Operator) auflisten.
1. Arrays kombinieren (Arrays verketten)
Es gibt verschiedene Möglichkeiten, Arrays zu kombinieren. Mit dem Spread-Operator können Sie dies jedoch an einer beliebigen Stelle in einem Array platzieren. Wenn Sie zwei Arrays kombinieren und Elemente an einer beliebigen Stelle im Array platzieren möchten, haben Sie folgende Möglichkeiten:
2. Arrays kopieren
Wenn wir eine Kopie eines Arrays wollten, hatten wir die Methode Array.prototypr.slice () . Sie können dies jedoch auch mit dem Spread-Operator tun.
3. Funktionen ohne Anwenden aufrufen
In ES5 verwenden
doStuff()
Sie häufig die Methode Function.prototype.apply () wie folgt , um ein Array mit zwei Zahlen an die Funktion zu übergeben :Mit dem Spread-Operator können Sie jedoch ein Array an die Funktion übergeben.
4. Arrays zerstören
Sie können die Destrukturierung und den Restoperator zusammen verwenden, um die Informationen nach Belieben in Variablen zu extrahieren:
5. Funktionsargumente als Ruheparameter
ES6 hat auch die drei Punkte (...), ein Restparameter, der alle verbleibenden Argumente einer Funktion in einem Array sammelt.
6. Verwenden von mathematischen Funktionen
Jede Funktion, bei der Spread als Argument verwendet wird, kann von Funktionen verwendet werden, die eine beliebige Anzahl von Argumenten akzeptieren können.
7. Zwei Objekte kombinieren
Mit dem Spread-Operator können Sie zwei Objekte kombinieren. Dies ist eine einfache und sauberere Methode.
8. Trennen Sie eine Zeichenfolge in separate Zeichen
Mit dem Spread-Operator können Sie eine Zeichenfolge in separate Zeichen verteilen.
Sie können sich weitere Möglichkeiten vorstellen, den Spread-Operator zu verwenden. Was ich hier aufgelistet habe, sind die gängigen Anwendungsfälle.
quelle
Dies ist eine neue Funktion in ES6 / Harmony. Es wird der Spread-Operator genannt. Sie können entweder die Bestandteile eines Arrays / Objekts trennen oder mehrere Elemente / Parameter nehmen und zusammenkleben. Hier ist ein Beispiel:
Und mit einem Objekt / Schlüsseln:
Was wirklich cool ist, ist, dass Sie es verwenden können, um "den Rest der Werte" zu bedeuten.
quelle
Diese werden Spreads genannt. So wie der Name schon sagt. Es bedeutet, dass der Wert in dieses Array oder diese Objekte eingefügt wird.
Sowie :
quelle