20. ¿Que son los Props de React?
Tutorial 20: ¿Qu茅 son los Props de React?
馃幆 Objetivo
Aprender a pasar informaci贸n entre componentes usando props en React.
馃摉 Introducci贸n a los Props
¿Qu茅 son los Props?
Los props (propiedades) son la forma que tiene React de pasar informaci贸n de un componente padre a un componente hijo.
Analog铆a sencilla: Imagina que los props son como par谩metros que le pasas a una funci贸n, pero en el mundo de los componentes React.
馃幁 Ejemplo Visual: Flujo de Props
text
┌─────────────────┐
│ App.js │ ← Componente PADRE
│ (tiene nombre) │
└────────┬────────┘
│ Pasa el nombre como prop
▼
┌─────────────────┐
│ Saludar.js │ ← Componente HIJO
│ (usa el nombre)│
└─────────────────┘
馃攳 Problema sin Props
Situaci贸n: Tenemos un componente Saludar que debe decir "Hola [nombre]", pero el nombre est谩 en App.js
Sin props - NO FUNCIONA:
jsx
// Saludar.js
function Saludar() {
return <h1>Hola ???</h1>;
// ¿C贸mo accedo al nombre si est谩 en App.js?
}
✅ Soluci贸n: Usando Props
Paso 1: Componente Padre (App.js) - ENV脥A props
jsx
// App.js
import React from "react";
import Saludar from "./components/Saludar";
function App() {
const nombreUsuario = "Agust铆n Navarro";
return (
<div className="App">
{/* Pasamos el nombre como prop llamado "nombre" */}
<Saludar nombre={nombreUsuario} />
{/* Tambi茅n podemos pasar otros valores */}
<Saludar nombre="Mar铆a L贸pez" />
<Saludar nombre="Carlos Ruiz" />
</div>
);
}
export default App;
Paso 2: Componente Hijo (Saludar.js) - RECIBE props
jsx
// Saludar.js
import React from "react";
// El par谩metro "props" contiene todas las propiedades que recibimos
function Saludar(props) {
return (
<div>
{/* Accedemos al prop "nombre" */}
<h1>Hola {props.nombre}</h1>
</div>
);
}
export default Saludar;
Resultado en pantalla:
text
Hola Agust铆n Navarro
Hola Mar铆a L贸pez
Hola Carlos Ruiz
馃帹 Ejemplo Completo con M煤ltiples Props
App.js (Padre)
jsx
// App.js
import React from "react";
import Usuario from "./components/Usuario";
function App() {
return (
<div>
{/* Pasamos M脷LTIPLES props */}
<Usuario
nombre="Ana Garc铆a"
edad={28}
ciudad="Madrid"
esPremium={true}
/>
<Usuario
nombre="Pedro S谩nchez"
edad={35}
ciudad="Barcelona"
esPremium={false}
/>
</div>
);
}
Usuario.js (Hijo)
jsx
// Usuario.js
import React from "react";
function Usuario(props) {
return (
<div style={{ border: "1px solid #ccc", padding: "10px", margin: "10px" }}>
<h2>Nombre: {props.nombre}</h2>
<p>Edad: {props.edad} a帽os</p>
<p>Ciudad: {props.ciudad}</p>
<p>Tipo: {props.esPremium ? "Usuario Premium" : "Usuario B谩sico"}</p>
</div>
);
}
export default Usuario;
馃殌 Desestructuraci贸n de Props (Forma Moderna)
En lugar de usar props.nombre, podemos desestructurar:
jsx
// Saludar.js - Forma DESESTRUCTURADA
function Saludar({ nombre, edad, ciudad }) {
return (
<div>
<h1>Hola {nombre}</h1>
<p>Tienes {edad} a帽os</p>
<p>Vives en {ciudad}</p>
</div>
);
}
App.js correspondiente:
<Saludar nombre="Laura" edad={25} ciudad="Valencia" />
馃幁 Ejemplo del Diagrama: Cadena de Props
┌─────────────────────┐
│ App.js │
│ nombre="Agust铆n" │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Saludar.js │
│ Recibe: nombre │
│ Pasa: nombre │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ MensajeFinal.js │
│ Recibe: nombre │
│ Muestra mensaje │
└─────────────────────┘
C贸digo completo:
App.js:
jsx
import React from "react";
import Saludar from "./components/Saludar";
function App() {
return <Saludar nombre="Agust铆n" />;
}
Saludar.js:
jsx
import React from "react";
import MensajeFinal from "./MensajeFinal";
function Saludar(props) {
// Recibe nombre de App.js y lo pasa a MensajeFinal
return <MensajeFinal nombre={props.nombre} />;
}
MensajeFinal.js:
jsx
import React from "react";
function MensajeFinal({ nombre }) {
return <h2>¡Bienvenido, {nombre}!</h2>;
}
馃摑 Tipos de Valores que Pueden Ser Props
// App.js
function App() {
return (
<div>
{/* STRING */}
<Componente texto="Hola Mundo" />
{/* N脷MERO (con llaves) */}
<Componente numero={42} />
{/* BOOLEANO */}
<Componente activo={true} />
{/* ARRAY */}
<Componente lista={["manzana", "banana", "naranja"]} />
{/* OBJETO */}
<Componente usuario={{ nombre: "Ana", edad: 30 }} />
{/* FUNCI脫N */}
<Componente onClick={() => console.log("Click!")} />
</div>
);
}
⚠️ Reglas Importantes sobre Props
1. Props son de solo lectura
jsx
// ❌ ERROR: No puedes modificar props
function Componente(props) {
props.nombre = "Nuevo Nombre"; // ¡ERROR!
return <h1>{props.nombre}</h1>;
}
2. Props pueden tener valores por defecto
jsx
function Saludar({ nombre = "Invitado" }) {
return <h1>Hola {nombre}</h1>;
}
// Si no pasamos nombre, mostrar谩 "Hola Invitado"
<Saludar />
3. Props.children - contenido entre etiquetas
jsx
// App.js
<Caja>
<p>Este contenido es props.children</p>
</Caja>
// Caja.js
function Caja(props) {
return <div className="caja">{props.children}</div>;
}
馃幆 Ejercicio Pr谩ctico
Crea un sistema de tarjetas de producto:
App.js:
jsx
import Producto from "./components/Producto";
function App() {
return (
<div>
<Producto
nombre="Laptop Gamer"
precio={999.99}
enStock={true}
categorias={["Tecnolog铆a", "Computadoras"]}
/>
<Producto
nombre="Smartphone"
precio={499.99}
enStock={false}
categorias={["Tecnolog铆a", "M贸viles"]}
/>
</div>
);
}
Tu tarea: Crea el componente Producto.js que muestre:
Nombre en <h2>
Precio con formato "$999.99"
Si est谩 en stock (verde) o no (rojo)
Las categor铆as como badges
馃搳 Resumen: Flujo de Informaci贸n con Props
text
DATOS → PROPS → COMPONENTE → INTERFAZ
↓ ↓ ↓
App.js → Saludar → Pantalla del usuario
Ventajas de usar Props:
Reutilizaci贸n: Un componente puede usarse con diferentes datos
Separaci贸n: La l贸gica y los datos est谩n separados de la presentaci贸n
Mantenibilidad: F谩cil de modificar y depurar
Composici贸n: Puedes construir interfaces complejas combinando componentes simples
馃挕 Conceptos Clave
Props = Propiedades que pasamos a componentes
Unidireccional: Los datos fluyen de padre a hijo
Inmutables: No se pueden modificar dentro del componente hijo
Din谩micos: Pueden contener cualquier tipo de dato
Obligatorios u opcionales: Puedes definir valores por defecto
✅ Conclusi贸n
Los props son el sistema de comunicaci贸n entre componentes en React. Permiten que:
Los componentes sean reutilizables con diferentes datos
La informaci贸n fluya desde componentes padres a hijos
Mantengamos un c贸digo limpio y organizado
¡Ahora puedes crear componentes din谩micos que se adaptan a diferentes datos! 馃帀
Pr贸ximo paso: Aprenderemos sobre el estado (state) para manejar datos que cambian dentro de un componente.
Comentarios
Publicar un comentario