¿Qué hace el ...
código React (usando JSX) y cómo se llama?
<Modal {...this.props} title='Modal heading' animation={false}>
javascript
reactjs
Thomas Johansen
fuente
fuente
...
operador se comporta de manera diferente en diferentes contextos. En este contexto, es el operador "extendido" descrito a continuación por @TJ Crowder. En un contexto diferente, este también podría ser el operador de "descanso" descrito a continuación por @Tomas Nikodym.Respuestas:
Esa es la notación de propagación de propiedad . Se agregó en ES2018 (la propagación para matrices / iterables era anterior, ES2015), pero se ha admitido en proyectos React durante mucho tiempo a través de la transpilación (como " atributos de propagación JSX ", aunque también podría hacerlo en otro lugar, no solo atributos )
{...this.props}
extiende las propiedades enumerables "propias"props
como propiedades discretas en elModal
elemento que está creando. Por ejemplo, si estáthis.props
contenidoa: 1
yb: 2
, entoncessería lo mismo que
Pero es dinámico, por lo que
props
se incluyen todas las propiedades "propias" .Dado que
children
es una propiedad "propia"props
, la propagación lo incluirá. Entonces, si el componente donde aparece esto tenía elementos secundarios, se los pasará aModal
. Poner elementos secundarios entre la etiqueta de apertura y las etiquetas de cierre es solo azúcar sintáctico, el tipo bueno, para poner unachildren
propiedad en la etiqueta de apertura. Ejemplo:Mostrar fragmento de código
La notación extendida es útil no solo para ese caso de uso, sino también para crear un nuevo objeto con la mayoría (o todas) de las propiedades de un objeto existente, que aparece mucho cuando actualiza el estado, ya que no puede modificar el estado directamente:
Eso reemplaza
this.state.foo
con un nuevo objeto con todas las mismas propiedades quefoo
laa
propiedad, que se convierte en"updated"
:Mostrar fragmento de código
fuente
children
propiedad o se combinan?children
. La experimentación me dice que los hijos que proporciona a través de un atributo llamadochildren
son reemplazados por los que especifique entre las etiquetas de inicio y fin, pero si se trata de un comportamiento indefinido, me aseguraré de no confiar en él.Como sabe
...
, los llamados atributos de propagación que el nombre representa permiten expandir una expresión.Y en este caso (lo voy a simplificar).
Esta:
es igual a
En resumen, podemos decir que es un atajo ordenado .
fuente
Los tres puntos representan el operador Spread en ES6. Nos permite hacer bastantes cosas en Javascript:
Concatenar matrices
Desestructurando una matriz
Combinando dos objetos
Hay otro uso para los tres puntos que se conoce como Parámetros de descanso y hace posible llevar todos los argumentos a una función en una sola matriz.
Argumentos de función como matriz
fuente
Los tres puntos en JavaScript son operador spread / rest .
Operador extendido
La sintaxis de propagación permite que una expresión se expanda en lugares donde se esperan múltiples argumentos.
Parámetros de descanso
La sintaxis del parámetro rest se usa para funciones con un número variable de argumentos.
El operador de extensión / descanso para matrices se introdujo en ES6. Hay una propuesta de Estado 2 para propiedades de propagación / descanso de objetos.
TypeScript también admite la sintaxis extendida y puede trasladarla a versiones anteriores de ECMAScript con problemas menores .
fuente
Esta es una característica de ES6, que también se usa en React. Mira el siguiente ejemplo:
De esta manera está bien si tenemos un máximo de 3 parámetros. Pero, ¿qué pasa si necesitamos agregar, por ejemplo, 110 parámetros? ¿Deberíamos definirlos todos y agregarlos uno por uno?
Por supuesto, hay una manera más fácil de hacer, que se llama SPREAD . En lugar de pasar todos esos parámetros que escribes:
No tenemos idea de cuántos parámetros tenemos, pero sabemos que hay un montón de esos. Basado en ES6, podemos reescribir la función anterior como se muestra a continuación y usar la distribución y el mapeo entre ellos para que sea tan fácil como un pedazo de pastel:
fuente
¡Es solo definir accesorios de una manera diferente en JSX para ti!
Está utilizando la
...
matriz y el operador de objeto en ES6 (el objeto uno aún no es totalmente compatible), por lo que, básicamente, si ya definió sus accesorios, puede pasarlo a su elemento de esta manera.Entonces, en su caso, el código debería ser algo como esto:
así que los accesorios que definiste, ahora están separados y se pueden reutilizar si es necesario.
Es igual a:
Estas son las citas del equipo de React sobre el operador de propagación en JSX:
fuente
Para aquellos que vienen del mundo de Python, los atributos de propagación de JSX son equivalentes a desempaquetar listas de argumentos (el
**
operador de Python ).Soy consciente de que esta es una pregunta de JSX, pero trabajar con analogías a veces ayuda a hacerlo más rápido.
fuente
El
...
(operador de propagación) se utiliza para reaccionar a:Proporcionan una forma ordenada de pasar accesorios de componentes primarios a secundarios. Por ejemplo, dado estos accesorios en un componente principal,
podrían pasarse de la siguiente manera al niño,
que es similar a esto
Pero mucho más limpio.
fuente
Tres puntos
...
representan operadores de dispersión o parámetros de descanso ,Permite que una expresión de matriz o cadena o cualquier cosa que pueda iterarse se expanda en lugares donde se esperan cero o más argumentos para llamadas a funciones o elementos para matriz.
Tenga en cuenta que la
foo
propiedad de obj1 ha sido sobrescrita por lafoo
propiedad obj2Nota: La sintaxis de propagación (que no sea en el caso de las propiedades de propagación) solo se puede aplicar a objetos iterables: por lo tanto, se generará un error
Referencia 1
Referencia2
fuente
Felicitaciones a Brandon Morelli. Explicó perfectamente aquí , pero los enlaces pueden morir, así que solo estoy pegando el contenido a continuación:
La sintaxis de propagación es simplemente tres puntos:
...
permite que un iterable se expanda en lugares donde se esperan 0+ argumentos. Las definiciones son difíciles sin contexto. Exploremos algunos casos de uso diferentes para ayudar a comprender lo que esto significa.Ejemplo # 1 - Insertar matrices Eche un vistazo al siguiente código. En este código, no usamos la sintaxis de propagación:
Arriba, hemos creado una matriz llamada
mid
. Luego creamos una segunda matriz que contiene nuestramid
matriz. Finalmente, desconectamos el resultado. ¿Qué esperasarr
imprimir? Haga clic en ejecutar arriba para ver qué sucede. Aquí está la salida:¿Es ese el resultado que esperabas? Al insertar la
mid
matriz en laarr
matriz, terminamos con una matriz dentro de una matriz. Eso está bien si ese era el objetivo. Pero, ¿qué sucede si solo desea una única matriz con los valores del 1 al 6? Para lograr esto, podemos usar la sintaxis de propagación. Recuerde, la sintaxis de propagación permite que los elementos de nuestra matriz se expandan. Veamos el siguiente código. Todo es igual, excepto que ahora estamos usando la sintaxis de propagación para insertar lamid
matriz en laarr
matriz:Y cuando presionas el botón Ejecutar, aquí está el resultado:
¡Increíble! ¿Recuerdas la definición de sintaxis extendida que acabas de leer? Aquí es donde entra en juego. Como puede ver, cuando creamos la
arr
matriz y usamos el operador de propagación en lamid
matriz, en lugar de simplemente insertarla, lamid
matriz se expande. Esta expansión significa que todos y cada uno de los elementos de lamid
matriz se insertan en laarr
matriz. En lugar de matrices anidadas, el resultado es una matriz única de números que van del 1 al 6.Ejemplo # 2 - Math JavaScript tiene un objeto matemático incorporado que nos permite hacer algunos cálculos matemáticos divertidos. En este ejemplo lo veremos
Math.max()
. Si no está familiarizado,Math.max()
devuelve el mayor de cero o más números. Aquí están algunos ejemplos:Como puede ver, si desea encontrar el valor máximo de múltiples números,
Math.max()
requiere múltiples parámetros. Desafortunadamente, no puede simplemente usar una sola matriz como entrada. Antes de la sintaxis extendida, la forma más fácil de usarMath.max()
en una matriz es usar.apply()
Funciona, es realmente molesto. Ahora eche un vistazo a cómo hacemos exactamente lo mismo con la sintaxis de propagación:
En lugar de tener que crear una función y utilizar el método de aplicación para devolver el resultado
Math.max()
, ¡solo necesitamos dos líneas de código! ¡La sintaxis extendida expande nuestros elementos de matriz e ingresa cada elemento de nuestra matriz individualmente en elMath.max()
método!Ejemplo # 3 - Copie una matriz En JavaScript, no puede simplemente copiar una matriz configurando una nueva variable igual a la matriz ya existente. Considere el siguiente ejemplo de código:
Cuando presionas ejecutar, obtendrás el siguiente resultado:
Ahora, a primera vista, parece que funcionó, parece que hemos copiado los valores de arr en arr2. Pero eso no es lo que ha sucedido. Verá, cuando trabaje con objetos en javascript (las matrices son un tipo de objeto) asignamos por referencia, no por valor. Esto significa que arr2 ha sido asignado a la misma referencia que arr. En otras palabras, cualquier cosa que hagamos a arr2 también afectará la matriz arr original (y viceversa). Echa un vistazo a continuación:
Arriba, hemos introducido un nuevo elemento d en arr2. Sin embargo, cuando desconectamos el valor de arr, verá que el valor d también se agregó a esa matriz:
¡Sin embargo, no hay que temer! ¡Podemos usar el operador de propagación! Considera el siguiente código. Es casi lo mismo que el anterior. Sin embargo, hemos utilizado el operador de propagación dentro de un par de corchetes:
Presione ejecutar y verá el resultado esperado:
Arriba, los valores de la matriz en arr se expandieron para convertirse en elementos individuales que luego se asignaron a arr2. Ahora podemos cambiar la matriz arr2 tanto como nos gustaría sin consecuencias en la matriz arr original:
Nuevamente, la razón por la que esto funciona es porque el valor de arr se expande para llenar los corchetes de nuestra definición de matriz arr2. Por lo tanto, estamos configurando arr2 para que sea igual a los valores individuales de arr en lugar de la referencia a arr como lo hicimos en el primer ejemplo.
Ejemplo de bonificación: cadena a matriz Como ejemplo final divertido, puede usar la sintaxis de propagación para convertir una cadena en una matriz. Simplemente use la sintaxis de propagación dentro de un par de corchetes:
fuente
Los tres puntos
(...)
se denominan operador de propagación, y esto es conceptualmente similar al operador de distribución de matriz ES6, JSX aprovecha estos estándares compatibles y en desarrollo para proporcionar una sintaxis más limpia en JSXReferencia:
1) https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties
2) https://facebook.github.io/react/docs/jsx-spread.html
fuente
El significado de ... depende de dónde lo use en el código,
fuente
Este es un operador extendido ...
Por ejemplo, si tiene una matriz
first=[1,2,3,4,5]
y otrasecond=[6,7,8]
.[...first, ...second] //result is [1,2,3,4,5,6,7,8]
Lo mismo también se puede hacer con objetos json.
fuente
En resumen, los tres puntos
...
son un operador extendido en ES6 (ES2015). El operador de propagación buscará todos los datos.Dará el resultado [1,2,3,4,5,6]
Dará el resultado [7,8,1,2,3,4]
fuente
Generalmente se llama operador de propagación, se usa para expandir donde sea necesario
ejemplo
puede usar esto siempre que lo necesite más sobre la sintaxis Spread del operador de propagación .
fuente
fuente
... esta sintaxis es parte de ES6 y no es algo que pueda usar solo en React. Se puede usar de dos maneras diferentes; como operador de propagación O como parámetro de reposo. Puede encontrar más información en este artículo: https://www.techiediaries.com/react-spread-operator-props-setstate/
lo que has mencionado en la pregunta es algo como esto, supongamos que así
Con el uso del operador de propagación puede pasar accesorios al componente de esta manera.
fuente
Es una práctica común pasar accesorios en una aplicación React. Al hacer esto, podemos aplicar cambios de estado al componente hijo independientemente de si es Puro o Impuro (sin estado o con estado). Hay momentos en que el mejor enfoque, al pasar accesorios, es pasar propiedades singulares o un objeto completo de propiedades. Con el soporte para matrices en ES6 se nos dio la notación "..." y con esto ahora podemos lograr pasar un objeto completo a un niño.
El proceso típico de pasar accesorios a un niño se observa con esta sintaxis:
Está bien usarlo cuando el número de accesorios es mínimo, pero se vuelve inmanejable cuando los números de accesorios aumentan demasiado. Un problema con este método ocurre cuando no conoce las propiedades necesarias dentro de un componente secundario y el método típico de JavaScript es establecer esas propiedades y vincularlas al objeto más tarde. Esto causa problemas con la comprobación de propType y los errores de rastreo de la pila críptica que no son útiles y causan demoras en la depuración. El siguiente es un ejemplo de esta práctica, y qué no hacer:
Se puede lograr el mismo resultado pero con un éxito más apropiado al hacer esto:
Pero no utiliza JSX spread o JSX, así que para volver a incluirlo en la ecuación, ahora podemos hacer algo como esto:
Las propiedades incluidas en "... accesorios" son foo: x, bar: y. Esto se puede combinar con otros atributos para anular las propiedades de "... accesorios" utilizando esta sintaxis:
Además, podemos copiar otros objetos de propiedad entre sí o combinarlos de esta manera:
O combine dos objetos diferentes como este (esto aún no está disponible en todas las versiones de reacción):
Otra forma de explicar esto, según el sitio react / docs de Facebook es:
Si ya tiene "accesorios" como objeto y desea pasarlo en JSX, puede usar "..." como operador SPREAD para pasar todo el objeto de accesorios. Los siguientes dos ejemplos son equivalentes:
Los atributos extendidos pueden ser útiles cuando está creando contenedores genéricos. Sin embargo, también pueden hacer que su código sea desordenado al facilitar el paso de muchos accesorios irrelevantes a componentes que no les importan. Esta sintaxis debe usarse con moderación.
fuente
Se llama operador de propagación. Por ejemplo, let hello = {name: '', msg: ''} let hello1 = {... hello} Ahora las propiedades del objeto hello se copian en hello1.
fuente
Se llama sintaxis de spreads en javascript.
Se utiliza para desestructurar una matriz u objeto en javascript.
ejemplo:
Puede hacerlo el mismo resultado con la
Object.assign()
función en javascript.Referencia: sintaxis extendida
fuente
Esto se compilará en:
donde da más dos propiedades
title
yanimation
más allá delprops
elemento host....
es el operador ES6 llamado Spread .Ver https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
fuente
El operador spread (operador triple) introduce en ecama script 6 (ES6) .Ecama script (ES6) es un contenedor de javascript.
Operador de propagación de propiedades enumerables en accesorios. this.props = {firstName: 'Dan', lastName: 'Abramov', ciudad: 'New York', país: 'USA'}
Pero el operador principal de propagación de características se utiliza para un tipo de referencia.
Esto se llama tipo de referencia, un objeto afecta a otros objetos porque son compartibles en la memoria. Si obtiene valor independientemente de la memoria de dispersión, ambos utilizan el operador de dispersión.
fuente
si tiene una matriz de elementos y desea mostrar los elementos que acaba de usar ... arrayemaments e iterará sobre todos los elementos
fuente
...
(tres puntos en Javascript) se llama Spread Sintaxis u Spread Operator. Esto permite expandir una iteración como una expresión de matriz o cadena o una expresión de objeto donde sea que se coloque. Esto no es específico de React. Es un operador de Javascript.Todas estas respuestas aquí son útiles, pero quiero enumerar los casos de uso prácticos más utilizados de la sintaxis Spread (Spread Operator).
1. Combinar matrices (concatenar matrices)
Hay una variedad de formas de combinar matrices , pero el operador de propagación le permite colocar esto en cualquier lugar de una matriz. Si desea combinar dos matrices y colocar elementos en cualquier punto dentro de la matriz, puede hacer lo siguiente:
2. Copiar matrices
Cuando queríamos una copia de una matriz, solíamos tener el método Array.prototypr.slice () . Pero, puede hacer lo mismo con el operador de propagación.
3. Funciones de llamada sin aplicar
En ES5, para pasar una matriz de dos números a la
doStuff()
función, a menudo utiliza el método Function.prototype.apply () de la siguiente manera:Sin embargo, al usar el operador de propagación, puede pasar una matriz a la función.
4. Matrices de desestructuración
Puede usar la desestructuración y el operador de descanso juntos para extraer la información en variables como desee:
5. Argumentos de funciones como parámetros de descanso
ES6 también tiene los tres puntos (...), que es un parámetro de reposo que recopila todos los argumentos restantes de una función en una matriz.
6. Usando funciones matemáticas
Cualquier función donde se use spread como argumento puede ser utilizada por funciones que pueden aceptar cualquier número de argumentos.
7. Combinando dos objetos
Puede usar el operador de propagación para combinar dos objetos. Esta es una manera fácil y limpia de hacerlo.
8. Separar una cadena en caracteres separados
Puede usar el operador de propagación para extender una cadena en caracteres separados.
Puede pensar en más formas de utilizar el Operador de propagación. Lo que he enumerado aquí son los casos de uso más populares.
fuente
Esta es una nueva característica en ES6 / Harmony. Se llama el Operador de propagación. Le permite separar las partes constituyentes de una matriz / objeto, o tomar múltiples elementos / parámetros y pegarlos. Aquí hay un ejemplo:
Y con un objeto / claves:
Lo que es realmente genial es que puedes usarlo para significar "el resto de los valores".
fuente
Esos se llaman spreads. Justo como su nombre lo indica. Significa que está poniendo cualquier valor en esos arreglos u objetos.
Como :
fuente