spreadlo podemos ver como la inversa derest.- En lugar de combinar valores en un array u objeto lo que va a hacer es espandir el contenido de un
arrayuobjeto. - La forma de escribir
spreades de la misma forma que rest...arrayu...objeto. - Spread necesita que sea utilizado en un iterable por lo cual lo podemos utilizar dentro de un array, de un objeto o una función.
const animales = ["leon", "perro", "gato"];
console.log(animales);
console.log(...animales); // devuelve los valores del array- Una forma simple de usar spread es cuando tenemos un array y necesitamos asignar los valores de otro array.
const animales1 = ["leon", "perro", "gato"];
const animales2 = ["gato", "delfin", "elefante"];
const animales = [...animales1, ...animales2];
console.log(animales); // [ 'leon', 'perro', 'gato', 'gato', 'delfin', 'elefante' ]-
Usamos el operador spread para crear un nuevo array que tiene los elementos de las variables
animales1yanimales2. -
La variable
animalesahora tiene todos los items de las otras dos colecciones ya que el operador spread retorno los items y fueron asignados dentro del arrayanimales -
También lo podemos utilizar para asignar / crear
propiedad:valorde objetos.
const persona = {
nombre: "Nicolas",
apellido: "Isnardi",
};
const datosUsuario = {
username: "nisnardi",
password: "1234",
};
const user = {
...persona,
...datosUsuario,
};
console.log(user);
// {
// nombre: 'Nicolas',
// apellido: 'Isnardi',
// username: 'nisnardi',
// password: '1234'
// }- En este ejemplo vemos como utilizar
spreadpara copiar las propiedades y valores que tienen los objetos literalespersona y datosUsuarioscomo parte del objeto asignado auser. - Este concepto se utiliza mucho en casos como cuando utilizamos
reduxen nuestras aplicacionesReact o React Nativepara asignar parte del estado actual y parte del estado nuevo y devolver la última versión del mismo. Es como un merge. - En el caso de objetos también podemos aprovechar a sobrescribir propiedades y valores.
const persona = {
nombre: "Nicolas",
apellido: "Isnardi",
};
const datosUsuario = {
username: "nisnardi",
password: "1234",
};
const user = {
...persona,
...datosUsuario,
nombre: "Simon",
username: "mono2019",
};
console.log(user);
// {
// nombre: 'Simon',
// apellido: 'Isnardi',
// username: 'mono2019',
// password: '1234'
// }- Dado que el operador spread se utiliza antes que la asignación de las propiedades
nombre y usernamequeda la última versión de las mismas con los valoresSimon y mono2019respectivamente. - También podemos utilizar este concepto en funciónes a la hora de pasar valores como parametros.
function mostrarDatosEnPantalla(valor1, valor2) {
console.log(`valor1: ${valor1}, valor2: ${valor2}`);
}
const animales = ["perro", "gato"];
mostrarDatosEnPantalla(...animales); // valor1: perro, valor2: gato- Y también lo podemos utilizar de la siguiente forma que puede ser confuso con
rest:
function mostrarDatosEnPantalla(valor1, valor2, valor3, valor4) {
console.log(
`valor1: ${valor1}, valor2: ${valor2}, valor3: ${valor3}, valor4: ${valor4}`
);
}
const animales = ["perro", "gato"];
mostrarDatosEnPantalla("delfin", ...animales, "leon");- Otra buena opción es utilizar
spreada la hora de tener que validar si unos valores deben o no ser parte de una colección.
const animales1 = ["leon", "perro", "gato"];
const animales2 = ["delfin", "loro", "mono"];
const animales = [...animales1, ...(false ? animales2 : [])];
console.log(animales); //[ 'leon', 'perro', 'gato' ]- Utilizando
spready un if ternario podemos establecer si los valores van a pertenecer a la nueva colección o no. - Este concepto también lo podemos utilizar con
objetos.
const mostrarOtro = false;
const persona = {
nombre: "Nicolas",
apellido: "Isnardi",
};
const datosUsuario = {
username: "nisnardi",
password: "1234",
};
const user = {
...persona,
...datosUsuario,
...(mostrarOtro ? { nombre: "Simon", username: "mono2019" } : {}),
};
console.log(user);
// {
// nombre: 'Nicolas',
// apellido: 'Isnardi',
// username: 'nisnardi',
// password: '1234'
// }- Dado que la condición es
falseestamos utilizando spread en un objeto vacío por lo cual no se agreaga o modifica ninguna propidad / valor existente. - Puedes aprender más sobre este tema utilizando la guía de MDN