Con lo que estamos lidiando aquí en este ejemplo en particular. En primer lugar, lidiamos con cambios sincrónicos en el estado, por eso dije que probablemente ni siquiera necesitaremos una acción. No tenemos ningún comportamiento asincrónico aquí. No es persistente, por lo que cada vez que actualizo la página, el contador volverá a ser cero. No necesitamos almacenar esto en ningún otro lugar fuera del estado de Vuex. Tiene una única fuente de cambios, por lo que esta es como nuestra mágica única fuente de verdad, que solo es responsable de los cambios de contador en nuestra aplicación. El contador puede ser cambiado en cualquier otro lugar. Se almacena solo en Vuex y se cambia solo en Vuex.
Y sí, no crea mucho código repetitivo. Este punto puede ser un poco discutible, porque tres propiedades diferentes para cambiar un contador... Aún así, es una cantidad razonable de código repetitivo para este cambio, considerando el hecho de que el contador se compartirá en toda la aplicación. Pero todo esto no es tan agradable cuando empezamos a tratar con datos del servidor. Así que añadamos algunos datos del servidor a la ecuación en nuestro estado de Vuex. Aquí, a primera vista, parece el mismo contador. Tenemos una propiedad de personajes, tenemos una imitación que cambia los personajes, y tenemos alguna acción asincrónica que obtiene data de nuestro punto final de personajes. Y después de esto, cometemos una mutación, así que todo está bien.
Pero con esto, tu aplicación no es suficiente porque obtener personajes es una operación asincrónica lo que significa que habrá un momento en tu aplicación cuando no haya personajes y estés ocioso. Estás esperando que tu API te devuelva tus data. Y por supuesto, necesitas añadir un estado de carga, porque necesitamos mostrar este bonito indicador de carga o esqueleto o lo que sea que estés mostrando en tu aplicación. Y también, estamos obteniendo data de la API. ¿Y qué pasa si la respuesta no está ahí? ¿Qué pasa si tu búsqueda no fue exitosa? Necesitamos manejar los errores, que es una super buena práctica para cualquier llamada asincrónica. Y por eso necesitamos añadir una bandera más—error—a nuestra aplicación. Y con esto, nuestra simple estructura de una-acción-una-mutación no es tan simple, porque necesitas actualizar la carga, necesitas actualizar el error, y aquí hay una convención bastante común que Gateweb también usa para manejar el comportamiento asincrónico con solicitudes gratuitas. Así que aquí tenemos como tres estados finitos—un estado de carga, un estado de éxito, y un estado de error. Y aquí estamos estableciendo la carga a verdadero, el error a falso, así que estamos en el estado de carga ahora. Luego recibimos nuestros personajes, todo está bien, la carga es falsa, el error es nulo, los personajes están aquí, y renderizamos el array de personajes, y por supuesto puede haber algún estado de error. Así que en este caso particular, establecemos la carga a falso, decimos que el error es algo que el servidor nos devuelve, seleccionamos tres mutaciones. Sí, puedes simplificarlo si tienes solo uno, pero si quieres algún tipo de estándar, usualmente las empresas vienen con algo como esto. Y ahora nuestra acción tampoco es tan simple, porque cuando empezamos una acción, entramos en este limbo de carga, solicitando un personaje, y luego tenemos personajes, cometemos la mutación de éxito, almacenando los personajes en el estado, y luego si hay un error, también cometemos una mutación de error, y si imaginas todo este código repetitivo, es bastante grande ya. Así que sí, es enorme para una sola solicitud, y si tenemos múltiples solicitudes, probablemente tengamos diferentes estados de carga, ¿o debería ser el mismo estado de carga? Cada vez que hacemos esto, necesitas repensarlo y entender si queremos compartir estados de carga entre diferentes solicitudes en nuestra aplicación, y esto todavía no responde a un montón de preguntas.
Comments