Maison > interface Web > Voir.js > Comment gérer les actions asynchrones avec Vuex?

Comment gérer les actions asynchrones avec Vuex?

Karen Carpenter
Libérer: 2025-03-11 19:25:42
original
715 Les gens l'ont consulté

Cet article montre la gestion des opérations asynchrones dans Vuex en utilisant des actions avec des promesses et asynchrones / attendre. Il met l'accent sur la séparation de la logique asynchrone (actions) des mises à jour d'état (mutations), incorporant des états de chargement, une gestion des erreurs robuste

Comment gérer les actions asynchrones avec Vuex?

Gestion des actions asynchrones avec Vuex

Les opérations asynchrones sont courantes dans les applications modernes et Vuex fournit des mécanismes pour les gérer gracieusement. Le concept principal tourne autour de l'utilisation d'actions, qui sont des fonctions qui peuvent commettre des mutations à l'état, mais surtout, ne sont pas directement liées aux changements d'état comme les mutations. Cela leur permet d'effectuer des tâches asynchrones comme les appels API avant de mettre à jour l'état. Les actions sont envoyées à partir de composants, et ils peuvent utiliser des promesses ou une syntaxe asynchrone / attendre pour une meilleure gestion du code asynchrone. La clé est de séparer la logique asynchrone (l'action) de la mise à jour de l'état (la mutation).

Utilisation de promesses ou asynchrones / attendre avec des actions Vuex

Oui, vous pouvez absolument utiliser les promesses et les asynchrones / attendre dans les actions Vuex pour gérer les opérations asynchrones. Les promesses offrent un moyen structuré de gérer les opérations asynchrones, tandis qu'Async / Await offre un style de codage de type plus synchrone qui améliore la lisibilité.

Utilisation de promesses:

 <code class="javascript">// Action const actions = { fetchData ({ commit }) { return new Promise((resolve, reject) => { fetch('/api/data') .then(response => response.json()) .then(data => { commit('SET_DATA', data); resolve(data); // Resolve the promise }) .catch(error => { reject(error); // Reject the promise }); }); } }; // Mutation const mutations = { SET_DATA (state, data) { state.data = data; } };</code>
Copier après la connexion

Utilisation d'async / attendre:

 <code class="javascript">// Action const actions = { async fetchData ({ commit }) { try { const response = await fetch('/api/data'); const data = await response.json(); commit('SET_DATA', data); return data; // Return the data } catch (error) { // Handle error (see next section) throw error; // Re-throw the error for handling in the component } } }; // Mutation (same as above) const mutations = { SET_DATA (state, data) { state.data = data; } };</code>
Copier après la connexion

Dans les deux exemples, l'action envoie une mutation pour mettre à jour l'état une fois que les données ont réussi. La principale différence concerne la façon dont le fonctionnement asynchrone est géré. Promises Utilisez .then() et .catch() , tandis que Async / Await utilise try...catch . Async / Await conduit généralement à un code plus propre et plus lisible pour les opérations asynchrones.

Meilleures pratiques pour gérer les données asynchrones et les mises à jour des données asynchrones

Plusieurs meilleures pratiques contribuent à gérer efficacement les données asynchrones et les mises à jour dans un magasin Vuex:

  • Inquiétude séparées: Gardez les actions axées sur les opérations et les mutations asynchrones axées sur la mise à jour de l'État. Cette séparation améliore la lisibilité et la maintenabilité.
  • État de chargement: introduire un état de chargement pour indiquer quand une opération asynchrone est en cours. Cela améliore l'expérience utilisateur en fournissant des commentaires.
  • Gestion des erreurs: implémentez une gestion des erreurs robuste pour gérer gracieusement les échecs potentiels pendant les opérations asynchrones (discutée dans la section suivante).
  • Mises à jour optimistes: pour certaines opérations (par exemple, la création ou la mise à jour des données), envisagez des mises à jour optimistes. Cela signifie mettre à jour l'état immédiatement après l'envoi de l'action, avant même que le serveur ne confirme le succès de l'opération. Si l'opération du serveur échoue, l'état peut être revenu.
  • Normalisation des données: structurez vos données de manière cohérente pour faciliter la gestion et l'accès.
  • Actions modulaires: décomposer les actions complexes en unités plus petites et plus gérables.
  • Utilisez l'objet context : utilisez l'objet context transmis aux actions pour accéder commit , dispatch , state et rootState pour des interactions flexibles dans le magasin.

Gérer efficacement les erreurs pendant les opérations asynchrones

Une gestion efficace des erreurs est cruciale pour la construction d'applications robustes. Voici des stratégies pour gérer les erreurs dans les actions Vuex:

  • Essayez ... Catch Blocks (avec Async / Await): Le bloc try...catch est le moyen le plus simple de gérer les erreurs dans les actions asynchrones / attendu. Le bloc catch intercepte les erreurs lancées pendant l'opération asynchrone.
  • Rejet de promesse (avec promesses): si vous utilisez des promesses, gérez les erreurs à l'aide de la méthode .catch() .
  • Objets d'erreur personnalisés: Créez des objets d'erreur personnalisés pour fournir plus de contexte sur l'erreur, telles que les codes d'erreur ou les messages spécifiques. Cela facilite le débogage et les rapports d'erreurs plus informatifs à l'utilisateur.
  • Gestion des erreurs centralisées: envisagez de créer une action dédiée ou du middleware pour gérer les erreurs à l'échelle mondiale. Cela centralise la journalisation des erreurs et fournit un seul point pour gérer divers scénarios d'erreur.
  • État d'erreur: ajoutez une propriété d'état d'erreur à votre magasin Vuex pour stocker les informations d'erreur. Cela permet aux composants d'afficher les messages d'erreur appropriés à l'utilisateur.

Exemple incorporant une gestion des erreurs avec Async / Await:

 <code class="javascript">const actions = { async fetchData ({ commit }, payload) { try { const response = await fetch(`/api/data/${payload.id}`); if (!response.ok) { const errorData = await response.json(); // Try to parse error response const errorMessage = errorData.message || 'Failed to fetch data'; throw new Error(errorMessage); // Throw a custom error } const data = await response.json(); commit('SET_DATA', data); return data; } catch (error) { commit('SET_ERROR', error); // Update error state throw error; // Re-throw for handling in component } } }; const mutations = { SET_ERROR (state, error) { state.error = error; } };</code>
Copier après la connexion

Cet exemple montre comment gérer les erreurs de réseau et les objets d'erreur personnalisés, fournissant un mécanisme de gestion des erreurs plus robuste dans votre magasin Vuex. N'oubliez pas d'afficher toujours les messages d'erreur conviviaux dans vos composants en fonction de l'état d'erreur dans votre magasin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal