Componentes y props
💡 🎯 Al terminar esta lección podrás…
- Pasar datos a un componente con props de cualquier tipo.
- Desestructurar props y definir valores por defecto.
- Crear componentes contenedor con
children. - Entender por qué las props son de solo lectura.
1.Props: los datos que recibe un componente
Un componente que siempre muestra lo mismo sirve de poco. Para que una misma pieza muestre datos distintos usamos las props (de *properties*, «propiedades»): información que el componente padre le pasa al hijo, igual que los atributos de una etiqueta HTML.
React reúne todas las props en un único objeto que recibe como primer parámetro la función. Por eso se escribe props.nombre. El mismo componente Saludo produce tres resultados distintos.
2.Desestructurar: la forma habitual
Escribir props. en cada línea cansa. Lo habitual es desestructurar el objeto en la propia lista de parámetros (lo viste en el curso de JavaScript):
- Valor por defecto:
rol = "Estudiante"se usa cuando no pasas esa prop. - Textos se pasan con comillas:
nombre="Ana". - Todo lo demás (números, booleanos, arrays, objetos, funciones) se pasa con llaves:
edad={28}. - Una prop booleana sin valor equivale a
true:<Boton deshabilitado />es igual adeshabilitado={true}.
3.Qué se puede pasar como prop
| Tipo | Cómo se pasa | Ejemplo |
|---|---|---|
| Texto | comillas | titulo="Mi curso" |
| Número | llaves | precio={25} |
| Booleano | llaves o presencia | activo={true} · activo |
| Array | llaves | etiquetas={["css", "html"]} |
| Objeto | llaves dobles | autor={{ nombre: "Ana" }} |
| Función | llaves | onGuardar={guardar} |
| JSX | llaves | icono={<Estrella />} |
4.La prop especial children
A veces quieres pasar a un componente otros elementos dentro de sus etiquetas, igual que haces con un <div> en HTML. Todo lo que pongas entre la etiqueta de apertura y de cierre llega como la prop children:
💡 Consejo · Composición antes que herencia
React favorece componer piezas pequeñas: una Caja que acepta children, una Pagina que contiene una Cabecera y un Contenido… Es la forma más flexible de reutilizar interfaz sin repetir código.
5.Las props son de solo lectura
Un componente nunca debe modificar sus propias props. Piensa en ellas como los argumentos de una función pura: mismos datos de entrada, misma pantalla. Si necesitas algo que cambie con el tiempo, usarás estado (lección 4).
function Contador({ valor }) {
valor = valor + 1; // ❌ no modifiques las props
return <p>{valor}</p>;
}
function Contador({ valor }) {
const siguiente = valor + 1; // ✅ un valor derivado
return <p>{siguiente}</p>;
}
📌 Nota · El flujo de datos
Los datos bajan de padres a hijos mediante props: es un flujo en una sola dirección. Esto hace que sea fácil saber de dónde sale cada dato cuando algo falla.
6.Organizar: un componente por archivo
En un proyecto real, cada componente suele vivir en su propio archivo y se importa donde se necesita. Esta es la estructura típica:
export default function Tarjeta({ titulo, children }) {
return (
<article className="tarjeta">
<h2>{titulo}</h2>
{children}
</article>
);
}
import Tarjeta from "./components/Tarjeta.jsx";
export default function App() {
return (
<Tarjeta titulo="Hola">
<p>Contenido de la tarjeta</p>
</Tarjeta>
);
}
📌 Nota · En los editores del curso
Aquí todos los componentes caben en un solo cuadro de código, para que puedas ver todo junto. En Vite los separarás con import y export, como arriba.
7.Errores frecuentes
- Pasar un número entre comillas:
precio="25"es el texto «25», no el número 25. Usaprecio={25}. - Olvidar las llaves en el parámetro:
function Perfil(nombre)recibe todo el objeto de props; escribefunction Perfil({ nombre }). - Modificar una prop: son de solo lectura; calcula un valor nuevo.
- Esperar
childrensin pintarlo: si no escribes{children}, el contenido se ignora. - Nombres de props mal escritos:
<Perfil nomber="Ana" />no da error, peronombrequedaundefined. - Pasar objetos nuevos en cada dibujo sin necesidad (se vuelve relevante con
memo, más adelante).
📒 Apuntes para llevar
- Las props son los datos que un componente padre pasa a un hijo; llegan como un objeto en el primer parámetro.
- Se desestructuran en los parámetros:
function Perfil({ nombre, rol = "Estudiante" }). - Texto con comillas; todo lo demás con llaves:
edad={28},activo={true},etiquetas={[…]}. childrencontiene lo que se escribe entre las etiquetas del componente.- Las props son de solo lectura: no las modifiques; calcula valores derivados.
- Los datos fluyen en una dirección: de padre a hijo.
- Un componente por archivo, con
export defaulteimport.
8.Glosario
| Término | Significado |
|---|---|
| Prop | Dato que un componente padre pasa a un hijo, como un atributo. |
children | Prop especial con el contenido escrito entre las etiquetas del componente. |
| Desestructuración | Sacar propiedades de un objeto en variables: { nombre, edad }. |
| Valor por defecto | Valor que se usa si la prop no se envía: rol = "Estudiante". |
| Composición | Construir interfaces combinando componentes pequeños. |
| Componente padre / hijo | El padre usa al hijo dentro de su JSX y le pasa props. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿Cómo recibe un componente las props?
React agrupa todas las props en un objeto y lo pasa como primer argumento.
¿Cómo pasas el número 25 como prop precio?
Con comillas sería un texto. Los números, booleanos, arrays y objetos van entre llaves.
¿Qué contiene children?
<Caja>hola</Caja> entrega «hola» como children.
¿Qué debes hacer con una prop dentro del componente?
Las props son de solo lectura; para datos que cambian se usa estado.
¿Qué hace <Perfil nombre="Ana" /> si Perfil tiene rol = "Estudiante" y no se pasa rol?
El valor por defecto se aplica cuando la prop no se envía.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.