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:

  1. Reutilizaci贸n: Un componente puede usarse con diferentes datos

  2. Separaci贸n: La l贸gica y los datos est谩n separados de la presentaci贸n

  3. Mantenibilidad: F谩cil de modificar y depurar

  4. 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

Entradas m谩s populares de este blog

18-Ciclo de Vida de un Componente React

17-Componentes en React-estado