6.12-0-3- Spread Operator
Spread Operator en Props de React
El spread operator (...) es una herramienta poderosa en React que nos permite pasar múltiples props de manera más eficiente y limpia. ¡Veamos un ejemplo práctico!
🔹 ¿Cómo funciona?
En lugar de pasar cada prop manualmente, podemos expandir un objeto directamente en las props del componente.
Ejemplo sencillo:
// Definimos un objeto con las props
const usuario = {
nombre: "Ana",
edad: 25,
pais: "España"
};
// Pasamos todas las props de una vez usando ...
function TarjetaUsuario(props) {
return (
<div>
<h2>Nombre: {props.nombre}</h2>
<p>Edad: {props.edad}</p>
<p>País: {props.pais}</p>
</div>
);
}
// Uso del componente
function App() {
return <TarjetaUsuario {...usuario} />;
}🔹 Beneficios:
✅ Evita repetir props una por una
✅ Mantiene el código más limpio y escalable
✅ Útil cuando trabajas con muchas props
💡 Extra Tip:
También puedes combinarlo con destructuring para mayor claridad:
function TarjetaUsuario({ nombre, edad, pais }) {
return (
<div>
<h2>{nombre}</h2>
<p>Edad: {edad}</p>
<p>País: {pais}</p>
</div>
);
}¿Habéis usado el spread operator en vuestros proyectos? ¡Contadme!
Recordando pasar objetos:
Pasar Objeto de App a Componente Cat
Aquí tienes el ejemplo más simple posible de cómo pasar un objeto gato desde el componente principal App al componente Cat:
🏠 Componente Principal (App.js)
import React from 'react';
import Cat from './Cat'; // Importamos el componente Cat
function App() {
// Objeto gato que vamos a pasar
const gato = {
name: "Dexter",
year: 5 };
return (
<div>
<h1>App Principal</h1>
{/* Pasamos el objeto gato como prop al componente Cat */}
<Cat datosGato={gato} />
</div> );}// Versión más simple (sin destructuring)
function Cat(props) {
return (
<div>
<h2>Información del Gato</h2>
<p>Nombre: {props.datosGato.name}</p>
<p>Edad: {props.datosGato.year} años</p>
</div> );}
Cómo usar el Spread Operator en React para actualizar estados (con ejemplos prácticos)
Cuando trabajamos con estados en React que contienen objetos, actualizar una propiedad específica sin perder el resto de los datos puede ser confuso. En este post, te mostraré cómo usar el spread operator (...) para manejar estados complejos de manera eficiente, con ejemplos prácticos.
Problema común: Actualizar un objeto en el estado
Imagina que tienes un componente Cat que guarda información de un gato en su estado:
import { useState } from "react";
const Cat = () => {
const [cat, setCat] = useState({ name: "Dexter", year: 5 });
const handleClick = () => {
// ¿Cómo actualizar solo el año sin perder el nombre?
setCat({ ...cat, year: cat.year + 1 });
};
return (
<>
<h2>
{cat.name} - {cat.year}
</h2>
<button onClick={handleClick} className="btn btn-dark mb-2">
Update year
</button>
</>
);
};
export default Cat;
App.js (pasando las props con ...gato
pasando las props con ...gato-import React from 'react';
import Cat from './Cat';
function App() {
const gato = {
name: "Dexter",
year: 5
};
return (
<div>
<h1>App Principal</h1>
{/* Pasamos todas las propiedades del objeto gato como props independientes */}
<Cat {...gato} />
</div>
);}export default App;
pasando las props con ...gato-import React from 'react';
import Cat from './Cat';
function App() {
const gato = {
name: "Dexter",
year: 5
};
return (
<div>
<h1>App Principal</h1>
{/* Pasamos todas las propiedades del objeto gato como props independientes */}
<Cat {...gato} />
</div>
);}export default App;function Cat({ name, year }) {
return (
<div>
<h2>Datos del Gato</h2>
<p>Nombre: {name}</p>
<p>Edad: {year} años</p>
</div>
);}export default Cat;
function Cat({ name, year }) { return ( <div> <h2>Datos del Gato</h2> <p>Nombre: {name}</p> <p>Edad: {year} años</p> </div> );}export default Cat;
¿Qué hace el Spread Operator (...)?
Copia todas las propiedades del objeto
cat(name: "Dexter",year: 5).Sobrescribe solo la propiedad que cambia (
year: cat.year + 1).
Alternativa: Usar una función de actualización
Otra forma segura de actualizar el estado es usando una función callback en setCat, que recibe el estado anterior (prev):
const handleClick = () => {
setCat((prev) => ({ ...prev, year: prev.year + 1 }));
};¿Por qué es útil?
Evita dependencias del estado actual (
cat), previniendo errores en actualizaciones asíncronas.Más legible cuando el estado depende de su valor anterior.
¿Qué pasa si NO usamos el Spread Operator?
Si actualizas el estado así:
setCat({ year: cat.year + 1 }); // ❌¡Pierdes todas las demás propiedades! El resultado sería { year: 6 } (el nombre Dexter desaparece).
Conclusión
Usa
...(spread operator) para copiar y modificar objetos en el estado.Prefiere funciones de actualización (
(prev) => ...) cuando el nuevo estado dependa del anterior.Evita mutaciones directas (como
cat.year++), ya que React no detectará los cambios.
Práctica recomendada
// ✅ Forma segura y legible
setCat((prevCat) => ({
...prevCat,
year: prevCat.year + 1,
}));¿Te ha ayudado este ejemplo? ¡Déjame tus dudas en los comentarios! 🚀
⬇️ ¿Qué otros ejemplos te gustaría ver con el spread operator?
#React #JavaScript #SpreadOperator #FrontendDevelopment
Comentarios
Publicar un comentario