23. Pasando funciones entre componente por los props-bueno

 

Pasando funciones entre componentes por props en React

馃摎 Introducci贸n

En React, no solo podemos pasar datos (variables, objetos) entre componentes, sino tambi茅n funciones. Esto permite que componentes hijos ejecuten l贸gica definida en el componente padre, facilitando la comunicaci贸n bidireccional.


馃幆 Objetivo

Aprender a pasar funciones como props entre componentes y c贸mo el componente hijo puede ejecutarlas devolviendo datos al componente padre.


馃摝 Estructura del proyecto

text

App.js (Componente padre)

└── Saludar.js (Componente hijo)






馃敡 Paso 1: Componente hijo inicial (versi贸n independiente)

Saludar.js (versi贸n inicial):

import React from "react";


export default function Saludar(props) {

    const saludar = () => {

        alert("Hola Agustin");

    };


    return (

        <div>

            <button onClick={saludar}>Saludar</button>

        </div>

    );

}

Problema: El componente es independiente y no recibe funciones desde fuera.

馃敡 Paso 2: Preparar el componente padre (App.js)

App.js:

function App() {

    const user = {

        nombre: "Agustin Navarro Galdon",

        edad: 26,

        color: "Azul"

    };


    const saludarFn = () => {

        console.log("Hola");

    };


    return (

        <div className="App">

            <header className="App-header">

                <img src={logo} className="App-logo" alt="logo" />

                <Saludar userInfo={user} saludarFn={saludarFn} />

            </header>

        </div>

    );}export default App;


馃敡 Paso 3: Recibir props en el componente hijo

Saludar.js (modificado):

jsx

import React from "react";


export default function Saludar(props) {

    console.log(props); // Verificamos qu茅 llega por props

    return (

        <div>

            <button onClick={props.saludarFn}>Saludar</button>

        </div>

    );

}

Resultado en consola:

text

{

    userInfo: {nombre: "Agustin Navarro Galdon", edad: 26, color: "Azul"},

    saludarFn: () => { console.log("Hola"); }

}


馃敡 Paso 4: Ejecutar la funci贸n recibida por props

Cuando hacemos clic en el bot贸n, ejecuta la funci贸n saludarFn del padre:

jsx

<button onClick={props.saludarFn}>Saludar</button>



馃敡 Paso 5: Mejorar la funci贸n para recibir par谩metros

App.js (funci贸n modificada):

jsx

const saludarFn = (name) => {

    console.log("Hola " + name);

};


馃敡 Paso 6: Pasar datos del hijo al padre (ERROR COM脷N)

❌ FORMA INCORRECTA:

jsx

<button onClick={props.saludarFn(props.userInfo.nombre)}>Saludar</button>

Problema: Los par茅ntesis () ejecutan la funci贸n inmediatamente al renderizar, no al hacer clic.


馃敡 Paso 7: Soluci贸n correcta - Funci贸n flecha an贸nima

✅ FORMA CORRECTA:

jsx

<button onClick={() => props.saludarFn(props.userInfo.nombre)}>

    Saludar

</button>

Explicaci贸n: La funci贸n flecha an贸nima () => {...} crea una nueva funci贸n que se ejecutar谩 solo cuando ocurra el clic.



馃敡 Paso 8: C贸digo final funcionando

App.js:

jsx

function App() {

    const user = {

        nombre: "Agustin Navarro Galdon",

        edad: 26,

        color: "Azul"

    };


    const saludarFn = (name) => {

        console.log("Hola " + name);

    };


    return (

        <div className="App">

            <header className="App-header">

                <img src={logo} className="App-logo" alt="logo" />

                <Saludar userInfo={user} saludarFn={saludarFn} />

            </header>

        </div>

    );

}

Saludar.js:

jsx

import React from "react";


export default function Saludar(props) {

    return (

        <div>

            <button onClick={() => props.saludarFn(props.userInfo.nombre)}>

                Saludar

            </button>

        </div>

    );

}


馃搳 Flujo de comunicaci贸n

  1. Padre → Hijo:

    • El padre pasa userInfo (datos) y saludarFn (funci贸n) al hijo

  2. Hijo → Padre:

    • El hijo ejecuta saludarFn con el par谩metro props.userInfo.nombre

    • El padre recibe el nombre y lo imprime en consola


⚠️ Errores comunes y soluciones

Error

Causa

Soluci贸n

Funci贸n se ejecuta al renderizar

Usar props.funcion(parametro) directamente

Envolver en funci贸n flecha: () => props.funcion(parametro)

undefined en par谩metros

Propiedad no existe o se escribe mal

Verificar nombres de props y usar console.log(props)

Funci贸n no definida

No se pas贸 la funci贸n como prop

Asegurar que el padre pasa la funci贸n correctamente


馃挕 Buenas pr谩cticas

  1. Nomenclatura clara: Usar nombres descriptivos como onSaludar, handleClick

  2. Validaci贸n: Verificar que las funciones existen antes de ejecutarlas

  3. Documentaci贸n: Comentar qu茅 par谩metros espera la funci贸n

  4. Manejo de errores: Considerar casos donde props puedan ser undefined


馃幆 Resumen

  • ✅ Pasamos funciones como props igual que cualquier dato

  • ✅ El hijo ejecuta funciones del padre

  • ✅ Podemos pasar par谩metros del hijo al padre

  • ✅ Usamos funciones flecha an贸nimas para evitar ejecuci贸n inmediata

  • ✅ Logramos comunicaci贸n bidireccional entre componentes


馃殌 Pr贸ximo paso

En el siguiente tutorial aprenderemos a:

  • Validar props cuando no llegan correctamente

  • Establecer valores por defecto para props

  • Usar PropTypes para validaci贸n de tipos


Consejo final: Esta t茅cnica es fundamental para crear componentes reutilizables que puedan comunicarse con sus padres, formando la base de aplicaciones React escalables y mantenibles


Comentarios