Cómo dispatch ejecuta actions asincrónicas en ViewX
Clase 43 de 53 • Curso Profesional de Vue.js 2
Contenido del curso
CLI y Dev Tools
- 3

Instalación de Vue.js: Node, Dev Tools y CLI
06:13 min - 4

Crear una aplicación Vue con CLI y webpack
12:49 min - 5

Cómo funciona webpack.config.js
10:38 min - 6

Babel: transpilador de JavaScript moderno
05:06 min - 7

ESLint con Standard JS: linteo automático en webpack
15:34 min - 8

Configuración de Sass y Bulma en Vue
06:18 min - 9

Cómo configurar Pug en Vue con webpack
04:23 min - 10
Diseño de Mockups: Práctica y Colaboración en Comunidad
00:20 min - 11
Creación de Vistas con Mockups y Vue.js
00:32 min
Manipulación del DOM
- 12

Expresiones en Vue: sintaxis doble llave
03:49 min - 13

Diferencia entre v-show y v-if en el DOM
06:22 min - 14

Qué es data binding en Vue.js
04:11 min - 15

Computed properties en Vue.js: cómo crearlas
04:13 min - 16

Qué son los watchers de Vue
02:25 min - 17

Eventos Vue: directiva v-on y métodos format
06:12 min - 18

Cómo construir una interfaz de búsqueda completa en Vue
19:03 min - 19
Manipulación del DOM con Vue.js: Práctica y Ejercicios
03:00 min
REST y HTTP
Sistema de Componentes
- 23

Cómo crear componentes en Vue
08:46 min - 24

Componentes Layout en Vue con Bulma
09:50 min - 25

Reactividad en Vue: $set y Object.assign
06:14 min - 26

Hooks del ciclo de vida en Vue.js
05:38 min - 27

Comunicación padre-hijo con props en Vue
23:27 min - 28

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

Slots: HTML dinámico en componentes Vue
13:42 min - 30

Plugin Event Bus: comunicar componentes sin relación en Vue
19:19 min
Vue Router
Extendiendo VueJS
Clases, Animaciones y Transiciones36
Vuex
- 39

Cómo Vuex centraliza estados en Vue
03:41 min - 40

Instalación de Vuex con estado único
17:32 min - 41

Cómo usar mutations y commit en Vuex
08:16 min - 42

Getters de Vuex: mapGetters y store sincronizado
07:35 min - 43

Cómo dispatch ejecuta actions asincrónicas en ViewX
Viendo ahora - 44

Instalación de Viewex en Platzi Music
26:37 min
Nuxt.js
Deploy a Producción con Now
Conclusiones
Bonus
Domina las actions en ViewX para manejar código asincrónico sin bloquear el flujo de la interfaz. Aquí verás cómo usar setTimeout, context, payload, dispatch y Promise para actualizar el store con seguridad, y encadenar lógica con then cuando la operación termine.
¿Por qué las actions resuelven el asincronismo en ViewX?
Las mutations son sincrónicas, por eso no deben ejecutar llamadas HTTP. Si una mutation dispara una llamada asincrónica, el store se actualiza antes de que termine la petición y el resto de los componentes no verán el estado correcto. Las actions solucionan esto: permiten ejecutar código asincrónico y, al finalizar, commitear una mutation.
- Las mutations actualizan el estado en el momento.
- Las actions esperan a que el proceso asincrónico termine.
- Luego usan context.commit para aplicar la mutation con el payload adecuado.
¿Qué es context y cómo usar commit de forma segura?
El context representa la instancia del store. Desde allí accedes a mutations y getters. En una action, lo correcto es usar context.commit('increment', payload) al finalizar la operación.
- context es el puente hacia el store.
- commit dispara la mutation adecuada.
- El payload transporta la información necesaria.
¿Cómo simular una llamada asincrónica con setTimeout?
Para simular asincronía se usa setTimeout: se “duerme” la ejecución y, tras 2 segundos, se hace el commit. Así se prueba que el estado solo se recompone cuando corresponde.
// store.js (versión básica)
export default {
actions: {
incrementAsync(context, payload) {
setTimeout(() => {
context.commit('increment', payload);
}, 2000); // 2 segundos
}
}
};
¿Cómo disparar la action desde un componente con dispatch?
Desde el componente se invoca la action con dispatch. Se añade un botón que ejecuta un método local, y ese método llama this.$store.dispatch('incrementAsync', payload).
- Usa un botón con
@clickpara la acción del usuario. - En el método
incrementAsync, dispara el dispatch. - Envía un payload con el valor a incrementar (por ejemplo,
number: 2).
<!-- app.vue -->
<template>
<button @click="incrementAsync">+ async</button>
</template>
<script>
export default {
methods: {
incrementAsync() {
this.$store.dispatch('incrementAsync', { number: 2 });
}
}
}
</script>
- Comportamiento esperado: tras hacer clic, pasan 2 segundos y se actualiza el contador.
- Ejemplo narrado: de 68 pasa a 72 después del retraso.
¿Cómo encadenar lógica tras la action con promises?
Para ejecutar código cuando la action termina, haz que la action devuelva una Promise de ECMA Script 2015. Luego, en el componente, usa then para correr la siguiente lógica (por ejemplo, un console.log).
// store.js (action devolviendo una Promise)
export default {
actions: {
incrementAsync(context, payload) {
return new Promise((resolve, reject) => {
setTimeout(() => {
context.commit('increment', payload);
resolve();
// Si hubiera error, se usaría reject().
}, 2000);
});
}
}
};
// app.vue (encadenando lógica con then)
export default {
methods: {
incrementAsync() {
this.$store
.dispatch('incrementAsync', { number: 2 })
.then(() => {
console.log('action terminada');
});
}
}
}
- Promise permite controlar el flujo tras la acción.
- resolve indica que todo salió bien.
- reject se usaría ante errores (por ejemplo, un status distinto de 200).
- then ejecuta la lógica siguiente cuando la acción finaliza.
¿Te gustaría ver cómo integrar estos patrones en tu proyecto, como Platzi Music? Cuéntame en los comentarios qué parte quieres profundizar o qué reto estás enfrentando al manejar asincronía con ViewX.