Que fait le ...
code React (en utilisant JSX) et comment s'appelle-t-il?
<Modal {...this.props} title='Modal heading' animation={false}>
javascript
reactjs
Thomas Johansen
la source
la source
...
opérateur se comporte différemment dans différents contextes. Dans ce contexte, il s'agit de l'opérateur "spread" décrit ci-dessous par @TJ Crowder. Dans un contexte différent, il pourrait également s'agir de l'opérateur "repos" décrit ci-dessous par @Tomas Nikodym.Réponses:
C'est la notation de propagation de propriété . Il a été ajouté dans ES2018 (la diffusion pour les tableaux / itérables était antérieure, ES2015), mais il est pris en charge dans les projets React depuis longtemps via la transpilation (en tant que " attributs de propagation JSX " même si vous pouvez le faire ailleurs, pas seulement les attributs ).
{...this.props}
répartit les "propres" propriétés énumérables enprops
tant que propriétés discrètes sur l'Modal
élément que vous créez. Par exemple, s'il estthis.props
contenua: 1
etb: 2
,serait le même que
Mais c'est dynamique, donc quelles que soient les propriétés "propres"
props
sont incluses.Puisqu'il
children
s'agit d'une propriété "propre"props
, la diffusion l'inclura. Donc, si le composant où cela apparaît avait des éléments enfants, ils seront transmis àModal
. Mettre des éléments enfants entre la balise d'ouverture et les balises de fermeture n'est que du sucre syntaxique - le bon type - pour mettre unechildren
propriété dans la balise d'ouverture. Exemple:Afficher l'extrait de code
La notation étalée est pratique non seulement pour ce cas d'utilisation, mais pour créer un nouvel objet avec la plupart (ou la totalité) des propriétés d'un objet existant - ce qui revient souvent lorsque vous mettez à jour l'état, car vous ne pouvez pas modifier l'état directement:
Cela remplace
this.state.foo
par un nouvel objet avec toutes les mêmes propriétés quefoo
laa
propriété, qui devient"updated"
:Afficher l'extrait de code
la source
children
propriété ou sont-elles combinées?children
. L'expérimentation me dit que les enfants que vous fournissez via un attribut appeléchildren
sont remplacés par ceux que vous spécifiez entre les balises de début et de fin, mais si c'est un comportement indéfini, je serais sûr de ne pas y compter.Comme vous le savez,
...
les attributs Spread que le nom représente, permettent à une expression d'être développée.Et dans ce cas (je vais le simplifier).
Cette:
est égal à
Bref, c'est un raccourci soigné , on peut dire .
la source
Les trois points représentent l' opérateur d'étalement dans ES6. Cela nous permet de faire pas mal de choses en Javascript:
Tableaux concaténés
Déstructurer un tableau
Combiner deux objets
Il existe une autre utilisation des trois points, connue sous le nom de paramètres de repos , qui permet de prendre tous les arguments d'une fonction dans un seul tableau.
Arguments de fonction sous forme de tableau
la source
Les trois points en JavaScript sont l' opérateur propagation / repos .
Opérateur de diffusion
La syntaxe de propagation permet à une expression d'être développée aux endroits où plusieurs arguments sont attendus.
Paramètres de repos
La syntaxe du paramètre reste est utilisée pour les fonctions avec un nombre variable d'arguments.
L'opérateur propagation / repos pour les tableaux a été introduit dans ES6. Il y a une proposition de State 2 de l' pour les propriétés de répartition / repos des objets.
TypeScript prend également en charge la syntaxe étendue et peut la transposer dans les anciennes versions d'ECMAScript avec des problèmes mineurs .
la source
Il s'agit d'une fonctionnalité d'ES6, qui est également utilisée dans React. Regardez l'exemple ci-dessous:
Cette méthode est correcte si nous avons un maximum de 3 paramètres. Mais, si nous devons ajouter par exemple 110 paramètres. Faut-il tous les définir et les ajouter un par un?
Bien sûr, il existe un moyen plus simple, appelé SPREAD . Au lieu de passer tous ces paramètres, vous écrivez:
Nous n'avons aucune idée du nombre de paramètres dont nous disposons, mais nous savons qu'il y en a des tas. Basé sur ES6, nous pouvons réécrire la fonction ci-dessus comme ci-dessous et utiliser la répartition et la cartographie entre elles pour la rendre aussi simple qu'un morceau de gâteau:
la source
Il s'agit simplement de définir des accessoires d'une manière différente dans JSX pour vous!
Il utilise un
...
tableau et un opérateur d'objet dans ES6 (l'objet un n'est pas encore entièrement pris en charge), donc si vous définissez déjà vos accessoires, vous pouvez le passer à votre élément de cette façon.Donc, dans votre cas, le code devrait ressembler à ceci:
de sorte que les accessoires que vous avez définis sont désormais séparés et peuvent être réutilisés si nécessaire.
C'est égal à:
Voici les citations de l'équipe React sur l'opérateur de propagation dans JSX:
la source
Pour ceux qui viennent du monde Python, les attributs JSX Spread sont équivalents à la décompression des listes d'arguments (l'
**
opérateur Python ).Je sais que c'est une question JSX, mais travailler avec des analogies aide parfois à l'obtenir plus rapidement.
la source
L'
...
opérateur (spread) est utilisé pour réagir à:fournir une manière ordonnée de passer des accessoires du parent aux composants enfants. par exemple, étant donné ces accessoires dans un composant parent,
ils pourraient être transmis de la manière suivante à l'enfant,
qui est similaire à ceci
mais bien plus propre.
la source
Trois points
...
représentent les opérateurs d'étalement ou les paramètres de repos ,Il permet à une expression de tableau ou une chaîne ou tout ce qui peut être itératif d'être développé dans des endroits où zéro ou plusieurs arguments pour les appels de fonction ou éléments pour le tableau sont attendus.
Notez que la
foo
propriété de obj1 a été remplacée par lafoo
propriété obj2Remarque: la syntaxe de propagation (autre que dans le cas des propriétés de propagation) ne peut être appliquée qu'aux objets itérables: la suite génère donc une erreur
Référence1
Référence2
la source
Bravo à Brandon Morelli. Il a expliqué parfaitement ici , mais les liens peuvent mourir, donc je ne fais que coller le contenu ci-dessous:
La syntaxe de propagation est simplement de trois points:
...
elle permet à un itérable de se développer aux endroits où 0+ arguments sont attendus. Les définitions sont difficiles sans contexte. Explorons différents cas d'utilisation pour comprendre ce que cela signifie.Exemple # 1 - Insertion de tableaux Jetez un œil au code ci-dessous. Dans ce code, nous n'utilisons pas la syntaxe étendue:
Ci-dessus, nous avons créé un tableau nommé
mid
. Nous créons ensuite un deuxième tableau qui contient notremid
tableau. Enfin, nous déconnectons le résultat. Qu'espérez-vousarr
imprimer? Cliquez sur exécuter ci-dessus pour voir ce qui se passe. Voici la sortie:Est-ce le résultat que vous attendiez? En insérant le
mid
tableau dans learr
tableau, nous nous sommes retrouvés avec un tableau dans un tableau. C'est bien si tel était le but. Mais que faire si vous ne voulez qu'un seul tableau avec les valeurs de 1 à 6? Pour ce faire, nous pouvons utiliser la syntaxe étendue! N'oubliez pas que la syntaxe répartie permet aux éléments de notre tableau de se développer. Regardons le code ci-dessous. Tout est pareil - sauf que nous utilisons maintenant la syntaxe étalée pour insérer lemid
tableau dans learr
tableau:Et lorsque vous appuyez sur le bouton Exécuter, voici le résultat:
Impressionnant! Vous vous souvenez de la définition de la syntaxe étendue que vous venez de lire ci-dessus? Voici où cela entre en jeu. Comme vous pouvez le voir, lorsque nous créons le
arr
tableau et utilisons l'opérateur d'étalement sur lemid
tableau, au lieu d'être simplement inséré, lemid
tableau se développe. Cette expansion signifie que chaque élément dumid
tableau est inséré dans learr
tableau. Au lieu de tableaux imbriqués, le résultat est un tableau unique de nombres allant de 1 à 6.Exemple # 2 - Math JavaScript a un objet mathématique intégré qui nous permet de faire des calculs mathématiques amusants. Dans cet exemple, nous allons regarder
Math.max()
. Si vous n'êtes pas familier,Math.max()
renvoie le plus grand de zéro ou plusieurs nombres. Voici quelques exemples:Comme vous pouvez le voir, si vous voulez trouver la valeur maximale de plusieurs nombres,
Math.max()
nécessite plusieurs paramètres. Vous ne pouvez malheureusement pas simplement utiliser un seul tableau en entrée. Avant la syntaxe étendue, la façon la plus simple d'utiliserMath.max()
sur un tableau est d'utiliser.apply()
Cela fonctionne, c'est vraiment très ennuyeux. Maintenant, regardez comment nous faisons exactement la même chose avec la syntaxe étendue:
Au lieu d'avoir à créer une fonction et à utiliser la méthode apply pour renvoyer le résultat de
Math.max()
, nous n'avons besoin que de deux lignes de code! La syntaxe étendue étend nos éléments de tableau et saisit chaque élément de notre tableau individuellement dans laMath.max()
méthode!Exemple # 3 - Copier un tableau En JavaScript, vous ne pouvez pas simplement copier un tableau en définissant une nouvelle variable égale au tableau déjà existant. Prenons l'exemple de code suivant:
Lorsque vous appuyez sur Exécuter, vous obtenez la sortie suivante:
Maintenant, à première vue, il semble que cela ait fonctionné - il semble que nous ayons copié les valeurs de arr dans arr2. Mais ce n'est pas ce qui s'est passé. Vous voyez, lorsque vous travaillez avec des objets en javascript (les tableaux sont un type d'objet), nous attribuons par référence, pas par valeur. Cela signifie que arr2 a été affecté à la même référence que arr. En d'autres termes, tout ce que nous faisons pour arr2 affectera également le tableau arr d'origine (et vice versa). Jetez un œil ci-dessous:
Ci-dessus, nous avons poussé un nouvel élément d dans arr2. Pourtant, lorsque nous nous déconnectons de la valeur de arr, vous verrez que la valeur d a également été ajoutée à ce tableau:
Pas besoin de craindre cependant! Nous pouvons utiliser l'opérateur de propagation! Considérez le code ci-dessous. C'est presque la même chose que ci-dessus. Au lieu de cela, nous avons utilisé l'opérateur d'étalement dans une paire de crochets:
Cliquez sur exécuter, et vous verrez la sortie attendue:
Ci-dessus, les valeurs du tableau dans arr se sont développées pour devenir des éléments individuels qui ont ensuite été affectés à arr2. Nous pouvons maintenant changer le tableau arr2 autant que nous le voudrions sans conséquences sur le tableau arr d'origine:
Encore une fois, la raison pour laquelle cela fonctionne est que la valeur de arr est développée pour remplir les crochets de notre définition de tableau arr2. Ainsi, nous définissons arr2 pour égaler les valeurs individuelles de arr au lieu de la référence à arr comme nous l'avons fait dans le premier exemple.
Exemple de bonus - String to Array Comme dernier exemple amusant, vous pouvez utiliser la syntaxe de propagation pour convertir une chaîne en tableau. Utilisez simplement la syntaxe étalée entre deux crochets:
la source
Les trois points
(...)
sont appelés l'opérateur d'étalement, ce qui est conceptuellement similaire à l'opérateur d'étalement du tableau ES6, JSX tirant parti de ces normes prises en charge et en développement afin de fournir une syntaxe plus propre dans JSXRéférence:
1) https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties
2) https://facebook.github.io/react/docs/jsx-spread.html
la source
La signification de ... dépend de l'endroit où vous l'utilisez dans le code,
la source
C'est un opérateur de spread ...
Par exemple, si vous avez un tableau
first=[1,2,3,4,5]
et un autresecond=[6,7,8]
.[...first, ...second] //result is [1,2,3,4,5,6,7,8]
La même chose peut également être faite avec les objets json.
la source
En bref, les trois points
...
sont un opérateur de spread dans ES6 (ES2015). L'opérateur Spread récupère toutes les données.Donnera le résultat [1,2,3,4,5,6]
Donnera le résultat [7,8,1,2,3,4]
la source
Est généralement appelé opérateur d'étalement, il est utilisé pour s'étendre partout où cela est nécessaire
exemple
vous pouvez l'utiliser partout où vous en avez besoin plus sur la syntaxe Spread de l' opérateur de propagation .
la source
la source
... cette syntaxe fait partie d'ES6 et n'est pas quelque chose que vous ne pouvez utiliser que dans React. Elle peut être utilisée de deux manières différentes; en tant qu'opérateur d'étalement OU en tant que paramètre de repos.Vous pouvez trouver plus d'informations dans cet article: https://www.techiediaries.com/react-spread-operator-props-setstate/
ce que vous avez mentionné dans la question est quelque chose comme ça, supposons comme ça,
avec l'utilisation de l'opérateur d'étalement, vous pouvez passer des accessoires au composant comme celui-ci.
la source
Il est courant de passer des accessoires dans une application React. Ce faisant, nous sommes en mesure d'appliquer des changements d'état au composant enfant, qu'il soit pur ou impur (sans état ou avec état). Il y a des moments où la meilleure approche, lors du passage dans les accessoires, est de passer dans des propriétés singulières ou un objet entier de propriétés. Avec la prise en charge des tableaux dans ES6, nous avons reçu la notation "..." et avec cela, nous sommes maintenant capables de passer un objet entier à un enfant.
Le processus typique de transmission d'accessoires à un enfant est noté avec cette syntaxe:
C'est très bien à utiliser lorsque le nombre d'accessoires est minime, mais devient ingérable lorsque le nombre d'accessoires devient trop élevé. Un problème avec cette méthode se produit lorsque vous ne connaissez pas les propriétés nécessaires dans un composant enfant et que la méthode JavaScript typique consiste à définir simplement ces propriétés et à les lier à l'objet ultérieurement. Cela provoque des problèmes de vérification de propType et des erreurs de trace de pile cryptique qui ne sont pas utiles et entraînent des retards dans le débogage. Voici un exemple de cette pratique et ce qu'il ne faut pas faire:
Ce même résultat peut être atteint mais avec un succès plus approprié en procédant comme suit:
Mais n'utilise pas JSX spread ou JSX, donc pour boucler cela dans l'équation, nous pouvons maintenant faire quelque chose comme ceci:
Les propriétés incluses dans "... accessoires" sont foo: x, bar: y. Cela peut être combiné avec d'autres attributs pour remplacer les propriétés des "... accessoires" en utilisant cette syntaxe:
De plus, nous pouvons copier d'autres objets de propriété les uns sur les autres ou les combiner de cette manière:
Ou fusionnez deux objets différents comme celui-ci (ce n'est pas encore disponible dans toutes les versions de react):
Selon le site react / docs de Facebook, une autre façon d'expliquer cela est:
Si vous avez déjà des "accessoires" en tant qu'objet et que vous souhaitez le transmettre dans JSX, vous pouvez utiliser "..." en tant qu'opérateur SPREAD pour transmettre l'intégralité de l'objet d'accessoires. Les deux exemples suivants sont équivalents:
Les attributs d'étalement peuvent être utiles lorsque vous créez des conteneurs génériques. Cependant, ils peuvent également rendre votre code désordonné en facilitant le passage de nombreux accessoires non pertinents aux composants qui ne se soucient pas d'eux. Cette syntaxe doit être utilisée avec parcimonie.
la source
Son opérateur appelé spread. Par exemple, laissez hello = {name: '', msg: ''} let hello1 = {... hello} Les propriétés des objets hello sont désormais copiées dans hello1.
la source
Cela s'appelle la syntaxe des spreads en javascript.
Il utilise pour déstructurer un tableau ou un objet en javascript.
exemple:
Vous pouvez faire le même résultat avec la
Object.assign()
fonction en javascript.Référence: Spread syntax
la source
Cela sera compilé en:
où il donne plus de deux propriétés
title
etanimation
au-delà de l'props
élément hôte....
est l'opérateur ES6 appelé Spread .Voir https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
la source
opérateur de propagation (opérateur triple) introduit dans le script ecama 6 (ES6) .Le script ecama (ES6) est un wrapper de javascript.
répartir les propriétés énumérables des opérateurs dans les accessoires. this.props = {firstName: 'Dan', lastName: 'Abramov', ville: 'New York', pays: 'USA'}
Mais l'opérateur principal de répartition des fonctionnalités est utilisé pour un type de référence.
C'est ce qu'on appelle le type de référence, un objet affecte d'autres objets car ils sont partageables en mémoire. Si vous obtenez de la valeur indépendamment, cela signifie que la mémoire de propagation utilise les deux opérateurs de propagation.
la source
si vous avez un tableau d'éléments et que vous souhaitez afficher les éléments que vous utilisez simplement ... arrayemaments et il itérera sur tous les éléments
la source
...
(trois points en Javascript) s'appelle la Spread Syntax ou Spread Operator. Cela permet à un itérable comme une expression de tableau ou une chaîne d'être développé ou une expression d' objet d'être développé où qu'il soit placé. Ce n'est pas spécifique à React. Il s'agit d'un opérateur Javascript.Toutes ces réponses ici sont utiles, mais je veux énumérer les cas d'utilisation pratiques les plus utilisés de la syntaxe Spread (Spread Operator).
1. Combiner des tableaux (Concaténer des tableaux)
Il existe différentes manières de combiner des tableaux , mais l'opérateur d'étalement vous permet de le placer à n'importe quel endroit d'un tableau. Si vous souhaitez combiner deux tableaux et placer des éléments à n'importe quel point du tableau, vous pouvez procéder comme suit:
2. Copie de tableaux
Lorsque nous voulions une copie d'un tableau, nous avions la méthode Array.prototypr.slice () . Mais, vous pouvez faire de même avec l'opérateur de propagation.
3. Fonctions d'appel sans appliquer
Dans ES5, pour transmettre un tableau de deux nombres à la
doStuff()
fonction, vous utilisez souvent la méthode Function.prototype.apply () comme suit:Cependant, en utilisant l'opérateur d'étalement, vous pouvez passer un tableau dans la fonction.
4. Tableaux de déstructuration
Vous pouvez utiliser la déstructuration et l'opérateur de repos ensemble pour extraire les informations en variables comme vous le souhaitez:
5. Arguments de fonction comme paramètres de repos
ES6 a également les trois points (...) qui est un paramètre de repos qui collecte tous les arguments restants d'une fonction dans un tableau.
6. Utilisation des fonctions mathématiques
N'importe quelle fonction où spread est utilisé comme argument peut être utilisée par des fonctions qui peuvent accepter n'importe quel nombre d'arguments.
7. Combiner deux objets
Vous pouvez utiliser l'opérateur d'étalement pour combiner deux objets. C'est une façon simple et plus propre de le faire.
8. Séparez une chaîne en caractères séparés
Vous pouvez utiliser l'opérateur d'étalement pour étaler une chaîne en caractères séparés.
Vous pouvez penser à d'autres façons d'utiliser l'opérateur Spread. Ce que j'ai énuméré ici, ce sont les cas d'utilisation les plus courants.
la source
Il s'agit d'une nouvelle fonctionnalité d'ES6 / Harmony. Il s'agit de l'opérateur de diffusion. Il vous permet soit de séparer les parties constitutives d'un tableau / objet, soit de prendre plusieurs éléments / paramètres et de les coller ensemble. Voici un exemple:
Et avec un objet / clés:
Ce qui est vraiment cool, c'est que vous pouvez l'utiliser pour signifier "le reste des valeurs".
la source
C'est ce qu'on appelle les spreads. Tout comme son nom l'indique. Cela signifie qu'il met quelle que soit sa valeur dans ces tableaux ou objets.
Tel que :
la source