Cómo pasar datos de padre a hijo en Vue
Clase 26 de 37 • Curso de Reactividad con Vue.js 3
Contenido del curso
Reactividad a profundidad
- 6

Paradigma reactivo: responsivo, resiliente y escalable
03:49 min - 7

Proxies: la clave de la reactividad Vue
06:29 min - 8

Creando tu primer mini framework reactivo
07:04 min - 9

Integrar Proxy para crear mini framework reactivo
06:06 min - 10

Refleja tu lógica mantenible con JavaScript
09:29 min - 11

Conceptos clave de reactividad: efectos, track y trigger
03:53 min - 12

Efectos trackers triggers: cómo Vue vincula datos
07:39 min
Templates de Vue.js
- 13
Templates de HTML en Vue.js: Mejores Prácticas Esenciales
00:21 min - 14

Estructura inicial de Platzy Commerce con Vue
06:52 min - 15

Expresiones JavaScript en templates Vue
06:49 min - 16

v-bind y clase reactiva en Vue.js
06:08 min - 17

v-show vs v-if en Vue: cuándo usar cada uno
08:53 min - 18

Directiva v-for para listas en Vue.js
08:14 min - 19

Eventos con v-on en templates de Vue
06:49 min
APIs internas de Vue.js
Segunda capa: componentes de Vue.js
- 25

Crear componentes reutilizables con Vue
06:56 min - 26

Cómo pasar datos de padre a hijo en Vue
Viendo ahora - 27
Creación de Componentes Personalizados en Aplicaciones Web
00:37 min - 28

Eventos personalizados en Vue: comunicar hijo a padre
04:27 min - 29

Eventos personalizados con Composition API
03:57 min - 30

Watchers en Vue Options API
08:53 min - 31

Watchers en Vue Composition API
08:19 min - 32

Computed properties vs watchers en Vue
05:17 min - 33

Computed en Vue Composition API
06:20 min - 34

Ciclos de vida en Vue: cuándo y cómo cargar datos
08:19 min - 35

Ciclos de vida en Composition API
06:03 min
Siguientes pasos
Aprende a pasar datos de forma clara y escalable en Vue. Aquí verás cómo estructurar componentes, mantener el flujo unidireccional de información y usar props para conectar un padre con sus hijos tanto en Composition API como en Options API. Ideal para reutilizar estado, reducir errores y mantener el código limpio.
¿Por qué el flujo va de padre a hijo y qué rol cumplen las props?
Vue organiza la interfaz en una jerarquía: la app es el padre y cada componente es hijo. Según su filosofía, el flujo de información es de una sola dirección: de padre a hijo. Para lograrlo, se utilizan props: propiedades definidas en el hijo a las que el padre les pasa valores.
- Flujo unidireccional: evita inconsistencias y hace el estado predecible.
- Componentes anidados: un hijo puede tener sus propios hijos.
- Props: el hijo declara qué espera recibir; el padre envía con v-bind.
- Listas y repetición: el padre puede renderizar múltiples hijos con v-for y una key única.
En este enfoque, el estado “vive” donde debe vivir: datos globales o compartidos en el padre; datos específicos en el hijo cuando procede.
¿Cómo implementarlo en Composition API?
Primero se aisló el estado del producto dentro de un componente usando setup y un estado reactivo. Luego se detectó que la función add to cart dependía del estado definido en el padre. La solución fue mover el arreglo de productos al padre y pasar cada producto al hijo mediante una prop.
¿Cómo define el padre la lista y pasa el producto?
- Define una referencia de productos: un arreglo con varios objetos producto.
- Recorre la lista y crea una instancia del componente por elemento.
- Usa v-bind para pasar el producto actual y una key única basada en el nombre.
<!-- Padre (template) -->
<Product
v-for="product in products"
:key="product.name"
:product="product"
/>
// Padre (script) — Composition API
import { ref } from 'vue'
const products = ref([
{ name: 'P1', price: 10, stock: 3 },
{ name: 'P2', price: 20, stock: 5 },
{ name: 'P3', price: 15, stock: 2 },
])
¿Cómo declara el hijo la prop y la usa en setup?
- El componente hijo declara la prop en su definición:
props: ['product']. - En setup(props) se accede a
props.productpara leer datos del producto. - Se exponen métodos como add to cart y apply discount desde setup.
// Hijo (Product.js) — Composition API
export default {
props: ['product'],
setup(props) {
function addToCart() {
// usa props.product.
}
function applyDiscount() {
// lógica de descuento.
}
return { addToCart, applyDiscount, product: props.product }
},
template: `
<div>
<h3>{{ product.name }}</h3>
<p>Precio: {{ product.price }}</p>
<p>Stock: {{ product.stock }}</p>
<button @click="addToCart">Agregar al carrito</button>
</div>
`,
}
Puntos clave aprendidos:
- Declarar props en el hijo para permitir que el padre envíe datos.
- Recibir props en setup(props) para acceder a props.product.
- Reutilización: el mismo componente se instancia por cada elemento en la lista.
- Manejo de estado: el arreglo de products vive en el padre; el hijo consume y actúa.
¿Cómo se logra lo mismo con Options API?
El patrón es muy similar. Se define props: ['product'] en el componente y se accede desde el contexto con this.product. El padre recorre la lista y pasa la prop igual que en Composition API.
¿Cómo se declaran props y se accede con this?
- En el hijo,
props: ['product']agregaproductal contexto. - En el template se puede leer
productdirectamente, o comothis.producten métodos.
// Hijo — Options API
export default {
props: ['product'],
methods: {
addToCart() {
// usa this.product.
},
applyDiscount() {
// lógica de descuento.
},
},
}
<!-- Padre — Options API -->
<Product
v-for="product in products"
:key="product.name"
:product="product"
/>
Beneficios prácticos:
- Consistencia entre Composition API y Options API al definir props.
- Contexto claro: en Options API, this.product es la prop inyectada; en Composition API, props.product en setup.
- Escalabilidad: separar el estado global (padre) del estado específico (hijo) evita errores como en add to cart cuando el dato no está donde se espera.
¿Tienes dudas sobre cómo organizar tu estado o cómo estructurar tus props? Comenta tu caso y vemos cómo optimizarlo.