Pasar funciones del padre al hijo en React Native
馃幆 Objetivo
Aprender a:
Pasar funciones del padre al hijo mediante props.
Que el hijo ejecute esa funci贸n.
Que el hijo devuelva informaci贸n al padre.
馃З Punto de partida
Tenemos un componente que renderiza un bot贸n "Saludar". Al presionarlo, queremos que aparezca un mensaje de saludo con el nombre de un usuario.
La clave: la l贸gica del saludo debe vivir en el padre, no en el hijo.
⚠️ Antes de empezar: el error que hay que evitar
Muchos tutoriales arrancan mostrando el "problema" as铆:
// ❌ VERSI脫N INCORRECTA (solo para entender qu茅 NO hacer)
export default function Saludar(props) {
const saludar = () => {
Alert.alert('Saludo', 'Hola Agust铆n');
};
return <Button title="Saludar" onPress={saludar} />;
}¿Por qu茅 est谩 mal?
La funci贸n
saludarest谩 dentro del hijo.El hijo sabe demasiado: sabe el nombre, sabe qu茅 mostrar, sabe c贸mo mostrarlo.
El padre no tiene ning煤n control.
Si ma帽ana quieres saludar a otra persona, tienes que tocar el hijo.
馃憠 Regla: la l贸gica vive en el padre. El hijo solo dispara la acci贸n.
馃敡 Paso 1: Definir la funci贸n y los datos en el PADRE
// App.js
import React from 'react';
import { View } from 'react-native';
import Saludar from './components/Saludar';
function App() {
// Datos del usuario (los maneja el padre)
const user = {
nombre: 'Agust铆n Navarro Gald贸n',
edad: 26,
color: 'Azul',
};
// L贸gica del saludo (vive en el padre)
const saludarFn = () => {
console.log('Hola Agust铆n');
};
return (
<View>
<Saludar userInfo={user} saludarFn={saludarFn} />
</View>
);
}
export default App;馃攽 Puntos clave
user→ datos que el padre posee.saludarFn→ acci贸n que el padre define.Se pasan al hijo como props.
⚠️ Se pasa
saludarFnsin par茅ntesis (es la referencia, no la ejecuci贸n).
馃挕 Nota Android: console.log se ve en la terminal de Metro Bundler o en Logcat de Android Studio.
馃敡 Paso 2: Recibir y ejecutar la funci贸n en el HIJO
// components/Saludar.js
import React from 'react';
import { View, Button } from 'react-native';
export default function Saludar({ userInfo, saludarFn }) {
console.log('Props recibidas:', { userInfo, saludarFn });
return (
<View style={{ padding: 20 }}>
<Button title="Saludar" onPress={saludarFn} />
</View>
);
}馃攽 Puntos clave
El hijo no define ninguna funci贸n propia.
Solo recibe
saludarFny la conecta alonPress.Se usa destructuring
{ userInfo, saludarFn }en lugar deprops.saludarFn→ m谩s limpio.
馃搵 Resultado en consola
Props recibidas: {
userInfo: { nombre: 'Agust铆n Navarro Gald贸n', edad: 26, color: 'Azul' },
saludarFn: [Function: saludarFn]
}✅ Al presionar el bot贸n → se ejecuta saludarFn del padre → aparece "Hola Agust铆n" en la consola.
馃殌 Paso 3: Que el hijo DEVUELVA informaci贸n al padre
Hasta ahora el padre solo dice "Hola Agust铆n" fijo. Pero el objetivo dice:
"c贸mo el hijo puede devolver informaci贸n al padre"
Para eso, el hijo debe enviarle datos a la funci贸n del padre.
馃敡 Modificamos el hijo para pasar el nombre
// components/Saludar.js
import React from 'react';
import { View, Button } from 'react-native';
export default function Saludar({ userInfo, saludarFn }) {
return (
<View style={{ padding: 20 }}>
<Button
title="Saludar"
// 馃憞 el hijo le pasa el nombre al padre
onPress={() => saludarFn(userInfo.nombre)}
/>
</View>
);
}馃攽 ¿Por qu茅 () => saludarFn(...) y no saludarFn(...)?
onPress={saludarFn(userInfo.nombre)}→ ❌ ejecuta la funci贸n en el render (error).onPress={() => saludarFn(userInfo.nombre)}→ ✅ envuelve la llamada para que se ejecute solo al presionar.
馃敡 Paso 4: El padre recibe el dato y reacciona
// App.js
import React, { useState } from 'react';
import { View, Text } from 'react-native';
import Saludar from './components/Saludar';
function App() {
const user = {
nombre: 'Agust铆n Navarro Gald贸n',
edad: 26,
color: 'Azul',
};
// Estado para guardar el 煤ltimo saludo recibido
const [ultimoSaludo, setUltimoSaludo] = useState('');
// 馃憞 recibe el nombre que le manda el hijo
const saludarFn = (nombre) => {
console.log(`Hola ${nombre}`);
setUltimoSaludo(nombre);
};
return (
<View>
<Saludar userInfo={user} saludarFn={saludarFn} />
{ultimoSaludo !== '' && (
<Text style={{ padding: 20, fontSize: 18 }}>
脷ltimo saludo: {ultimoSaludo}
</Text>
)}
</View>
);
}
export default App;馃 ¿Qu茅 acaba de pasar? (flujo completo)
El usuario toca el bot贸n (en el hijo).
El hijo llama
saludarFn(userInfo.nombre)→ le pasa el nombre al padre.El padre recibe
nombre→ haceconsole.logy actualiza su estado consetUltimoSaludo.React vuelve a renderizar → aparece "脷ltimo saludo: Agust铆n Navarro Gald贸n" en pantalla.
馃搳 Diagrama del flujo
┌─────────────────────────────────────────────┐
│ PADRE (App.js) │
│ ├── datos: user { nombre, edad, color } │
│ ├── l贸gica: saludarFn(nombre) │
│ ├── estado: ultimoSaludo │
│ └── renderiza <Saludar ... /> │
└──────────────────┬──────────────────────────┘
│ props: { userInfo, saludarFn }
▼
┌─────────────────────────────────────────────┐
│ HIJO (Saludar.js) │
│ ├── recibe props │
│ ├── muestra el bot贸n │
│ └── onPress → saludarFn(userInfo.nombre) │
└──────────────────┬──────────────────────────┘
│ dato: nombre
▼
┌─────────────────────────────────────────────┐
│ PADRE reacciona │
│ ├── console.log(`Hola ${nombre}`) │
│ └── setUltimoSaludo(nombre) → re-render │
└─────────────────────────────────────────────┘✅ Resumen de correcciones al tutorial original
| # | Problema del tutorial original | Correcci贸n aplicada |
|---|---|---|
| 1 | El Paso 1 mostraba la funci贸n viviendo en el hijo, lo que confunde | Se aclar贸 que es solo el "anti-ejemplo" |
| 2 | El hijo no devolv铆a datos al padre | Se agreg贸 onPress={() => saludarFn(userInfo.nombre)} |
| 3 | El padre no reaccionaba al dato | Se agreg贸 useState para mostrar el saludo en pantalla |
| 4 | Se acced铆a a props.saludarFn | Se us贸 destructuring { userInfo, saludarFn } |
| 5 | No se explicaba por qu茅 () rompe el onPress | Se explic贸 el uso de () => fn(...) |
馃巵 ¿Por qu茅 este patr贸n importa?
Es la base de toda comunicaci贸n hijo → padre en React:
| Caso real | Hijo env铆a al padre… |
|---|---|
| Formulario de login | usuario y contrase帽a |
| Lista de tareas | id de la tarea a borrar |
| Carrito de compras | id del producto a agregar |
| Modal | confirmaci贸n o cancelaci贸n |
El hijo no decide nada. Solo avisa con datos. El padre decide qu茅 hacer.
¿Quieres que armemos el siguiente ejemplo con una lista de tareas aplicando este mismo patr贸n (el hijo manda el id al padre para eliminar
Comentarios
Publicar un comentario