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
Padre → Hijo:
El padre pasa userInfo (datos) y saludarFn (funci贸n) al hijo
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
馃挕 Buenas pr谩cticas
Nomenclatura clara: Usar nombres descriptivos como onSaludar, handleClick
Validaci贸n: Verificar que las funciones existen antes de ejecutarlas
Documentaci贸n: Comentar qu茅 par谩metros espera la funci贸n
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
Publicar un comentario