Eventos personalizados con Composition API
Clase 29 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
14:13 min - 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
Viendo ahora - 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 comunicar componentes de hijo a padre en Vue con eventos personalizados usando la Composition API. Sin this y con el contexto de setup, podrás emitir datos desde el producto y actualizar el estado del carrito en el componente padre. Además, verás cómo evitar errores comunes como Props is not defined y por qué es clave retornar funciones al template.
¿Cómo emitir eventos personalizados con Composition API en Vue?
Para emitir eventos desde un componente hijo con la Composition API, se define un método dentro de setup y se usa el contexto con emit. No hay this en setup, así que se toma el segundo parámetro de la función para acceder a emit y enviar el producto actual.
- Define el evento que el componente lanzará: send to cart.
- Crea el método en setup y retórnalo para usarlo en el template.
- Emite el evento con los datos necesarios: props.product.
¿Cómo definir el método en setup y retornarlo?
- Crea la función send to cart dentro de setup.
- Usa el contexto:
{ emit }. - Retorna el método para usarlo en el template.
export default {
props: {
product: Object,
},
setup(props, { emit }) {
const sendToCart = () => {
// Emite el evento con el producto actual del componente.
emit('send to cart', props.product);
};
// Importante: retornar lo que se usa en el template.
return { sendToCart };
},
};
¿Qué detalles debes cuidar al emitir?
- No existe this en setup: usa el contexto
{ emit }. - El payload del evento debe contener lo necesario: el producto actual.
- Asegúrate de guardar y limpiar caché si no ves cambios inmediatos.
¿Cómo mover add to cart al componente padre y escuchar el evento?
La función add to cart debe vivir donde está el estado del carrito, por eso se mueve al componente principal. Desde allí, se recibe el payload del evento y se actualiza el estado.
- Copia la función add to cart al componente con el carrito.
- Retórnala desde setup para usarla en el template.
- Escucha el evento send to cart y pasa el payload del evento a add to cart.
¿Cómo queda la lógica en el padre?
- La función usa el estado del carrito y recibe el producto del evento.
- Evita usar props en el padre cuando procesas el evento: usa el parámetro recibido.
export default {
setup() {
// Estado del carrito y demás lógica ya existente.
const addToCart = (productFromEvent) => {
// Usa el estado del carrito y agrega el producto recibido.
// No uses `props` aquí: el dato viene del evento.
// cart.value.push(productFromEvent) // Ejemplo de uso del estado.
};
return { addToCart };
},
};
¿Cómo conectar evento y método desde el template?
- Escucha el evento send to cart en el componente hijo.
- Llama a add to cart con el payload del evento: $event.
-
Verifica que el nombre del evento sea consistente en todos lados.
-
Ejemplo de flujo.
- Hijo emite:
emit('send to cart', props.product). - Padre escucha y pasa
$eventaaddToCart.
¿Qué habilidades, conceptos y errores clave aparecen?
Domina estas ideas para construir componentes escalables y predecibles.
- Options API vs Composition API: se replica el patrón de eventos, pero con setup y sin this.
- Contexto de setup:
{ emit }permite lanzar eventos personalizados desde el hijo. - Evento send to cart: define un canal claro para comunicar el producto seleccionado.
- props.product: fuente del dato a emitir desde el componente de producto.
- add to cart en el padre: la función se mueve donde vive el estado del carrito y se retorna para el template.
- Retornar desde setup: todo lo usado en el template debe estar retornado.
- Manejo de eventos en template: escuchar el evento y pasar
$eventcomo argumento. - Error Props is not defined: surge al usar
propsen el padre; solución: usar el parámetro recibido en la función. - Refresco y caché: si no ves cambios, recarga sin caché.
- Observadores personalizados: próximos pasos para añadir dinamismo adicional.
¿Te gustaría ver un ejemplo con múltiples productos o un manejo de descuentos más avanzado? Cuéntame en los comentarios qué caso quieres resolver a continuación.