Site icon Blog ARC Optimizer

Comprendre les méthodes de cycle de vie dans Vue.js / Blogs / Perficient

Comprendre les méthodes de cycle de vie dans Vue.js / Blogs / Perficient


Les gens louent Vue.js comme un framework JavaScript puissant et flexible pour sa simplicité et sa facilité d’utilisation. Vue.js inclut des hooks de cycle de vie comme l’une de ses fonctionnalités remarquables. Ces hooks permettent aux développeurs d’exécuter des actions spécifiques à différentes étapes de la vie d’un composant, facilitant ainsi la gestion d’une logique et d’interactions complexes. Dans ce guide, nous explorerons ces hooks de cycle de vie et montrerons comment vous pouvez les exploiter pour créer des applications Vue.js plus efficaces et réactives.

Chaque composant Vue passe par un cycle de vie, depuis sa création et ses mises à jour jusqu’à son éventuelle suppression du DOM. Les hooks de cycle de vie Vue sont des méthodes intégrées qui vous permettent de vous « accrocher » à différentes étapes de ce cycle de vie, afin que vous puissiez exécuter une logique personnalisée au bon moment.

Les hooks de cycle de vie sont divisés en quatre étapes principales :

  1. Création
  2. Montage
  3. Mise à jour
  4. Destruction

Examinons chacune de ces étapes pour comprendre leur fonctionnement.

1) Crochets de création :

Lancez votre composant Vue : explication des hooks de création

Les hooks de création sont déclenchés lors de la première création d’un composant, mais avant son ajout au DOM. Cette étape est utile pour définir des valeurs par défaut, initialiser des données ou effectuer des requêtes API initiales.

avantCréer()

  • But: Ce hook est appelé immédiatement après la création de l’instance Vue, mais avant la configuration des données ou des styles.
  • Cas d’utilisation : Ce hook est généralement utilisé pour initialiser des opérations de base, telles que la configuration d’un état de chargement ou la préparation de certaines propriétés par défaut.

créé()

  • But: Ce hook est appelé après la création de l’instance Vue et les données, propriétés calculées et méthodes du composant sont désormais accessibles.
  • Cas d’utilisation : Un endroit idéal pour récupérer des données à partir d’une API ou définir les données initiales des composants.

Exemple: Récupération des données utilisateur lors de la création du composant

<template>
    <div>
      <h2>User Profile</h2>
      <div v-if="loading">Loading user data...</div>
      <div v-else-if="error">{{ error }}</div>
      <div v-else>
        <p><strong>Name:</strong> {{ userData.firstName }} {{ userData.lastName }}</p>
        <p><strong>Email:</strong> {{ userData.email }}</p>
        <p><strong>Image:</strong></p>
        <img :src="https://blogs.perficient.com/2024/12/20/lifecycle-methods-in-vue-js/userData.image" alt="User Image" />
      </div>
    </div>
  </template>
  
  <script>
  export default {
    data() {
      return {
        userData: null,    // Will hold a single user's data after fetching
        loading: true,     // Used to show loading state
        error: null        // Used to show error messages if the API call fails
      };
    },
    beforeCreate() {
      console.log("Component is initializing...");
    },
    created() {
      console.log("Component has been created, data and methods are accessible now.");
      this.fetchUserData(); // Fetch data when component is created
    },
    methods: {
      async fetchUserData() {
        try {
          // API request to fetch user data
          const response = await fetch("https://dummyjson.com/users");
          if (!response.ok) throw new Error("Failed to fetch user data");
          const data = await response.json(); // Get the response as JSON
          this.userData = data.users[0]; // Assign the first user in the array to `userData`
        } catch (error) {
          this.error = "An error occurred while fetching user data.";
          console.error(error); // Log the error for debugging
        } finally {
          this.loading = false; // Stop showing the loading indicator
        }
      }
    }
  };
  </script>

Sortir:

Explication:

Dans cet exemple, le créé() le hook déclenche le processus de récupération des données et l’état du composant est mis à jour en conséquence. Il affiche d’abord un message de chargement, puis soit les données de l’utilisateur, soit un message d’erreur.

2) Crochets de montage

Intégration fluide du DOM avec les crochets de montage

Les crochets de montage sont déclenchés lorsqu’un composant est ajouté au DOM. C’est le moment idéal pour effectuer des tâches liées au DOM, car le composant est entièrement initialisé à ce stade.

avantMount()

  • But: Appelé avant que le composant ne soit monté sur le DOM, mais après que la fonction de rendu ait été préparée.
  • Cas d’utilisation : Utile pour les tâches de configuration juste avant le rendu du DOM (par exemple, ajuster les styles ou préparer les données), mais il est moins couramment utilisé dans la pratique.

monté()

  • But: Appelé après le montage du composant sur le DOM. C’est le meilleur moment pour interagir avec le DOM, configurer des bibliothèques tierces ou ajouter des écouteurs d’événements.
  • Cas d’utilisation : Fréquemment utilisé pour des tâches telles que la manipulation du DOM ou la configuration d’écouteurs d’événements.

Exemple: Récupération des données utilisateur lorsque le composant est monté

<template>
    <div>
      <h2>User Profile</h2>
      <div v-if="loading">Loading user data...</div>
      <div v-else-if="error">{{ error }}</div>
      <div v-else>
        <p><strong>Name:</strong> {{ userData.firstName }} {{ userData.lastName }}</p>
        <p><strong>Email:</strong> {{ userData.email }}</p>
        <p><strong>Image:</strong></p>
        <img :src="https://blogs.perficient.com/2024/12/20/lifecycle-methods-in-vue-js/userData.image" alt="User Image" />
      </div>
    </div>
  </template>
  <script>
  export default {
    data() {
      return {
        userData: null,    // Will hold user data after fetching
        loading: true,     // Used to show loading state
        error: null        // Used to show error messages if the API call fails
      };
    },  
    beforeMount() {
      console.log("Component is about to mount...");
      // Useful for pre-mount setup (e.g., adjusting DOM, preparing data)
    },
     mounted() {
      console.log("Component has been mounted to the DOM!");
      // Ideal for interacting with the DOM, like setting focus or event listeners
      this.fetchUserData(); // Call fetch data when component is mounted
    },  
    methods: {
      async fetchUserData() {
        try {
          const response = await fetch("https://dummyjson.com/users");
          if (!response.ok) throw new Error("Failed to fetch user data");
          const data = await response.json();
          this.userData = data.users[0]; // Set the first user in the list
        } catch (error) {
          this.error = "An error occurred while fetching user data.";
          console.error(error);
        } finally {
          this.loading = false;
        }
      }
    }
  };
  </script>

Sortir:

Explication:

Le hook Mounted() gère la récupération des données ici. Vue charge les données utilisateur uniquement après le montage du composant, ce qui en fait le moment idéal pour interagir avec le DOM.

3) Mise à jour des crochets

Gestion des modifications de données : maîtriser les hooks de mise à jour

Les hooks de mise à jour sont déclenchés chaque fois que les données réactives changent, provoquant un nouveau rendu du composant. Ces hooks vous permettent de surveiller et de réagir à ces changements.

avant la mise à jour()

  • But: Invoqué juste avant que le DOM soit sur le point d’être mis à jour en raison d’une modification réactive des données.
  • Cas d’utilisation : Peut être utilisé pour des tâches de préparation, telles que la journalisation des modifications de données ou la réalisation d’ajustements mineurs de l’interface utilisateur avant la mise à jour.

mis à jour()

  • But: Appelé juste après la mise à jour du DOM.
  • Cas d’utilisation : Utile pour les tâches qui reposent sur le DOM mis à jour, comme le déclenchement d’animations ou l’interaction avec des bibliothèques tierces.

Exemple: Mise à jour des données et suivi des modifications

<template>
    <div>
      <h2>Counter Example with Updating Hooks</h2>
      <p>Counter Value: {{ counter }}</p>
      <button @click="incrementCounter">Increment Counter</button>
      <p>{{ message }}</p>
    </div>
  </template>
  <script>
  export default {
    data() {
      return {
        counter: 0,    // Counter that will be incremented
        message: ""    // Message to display after updating
      };
    },
    beforeUpdate() {
      console.log("Component is about to re-render...");
      this.message = "Updating counter...";
      // This hook can be used to perform any preparation or clean-up just before the update happens.
    },
    updated() {
      console.log("Component has re-rendered!");
      this.message = "Counter updated successfully!";
    },
    methods: {
      incrementCounter() {
        this.counter += 1; // Increment the counter, triggering the update lifecycle hooks
      }
    }
  };
  </script>

Sortir:

Explication:

Cliquer sur le bouton déclenche les deux avant la mise à jour() et mis à jour()permettant de gérer l’état du composant avant et après la mise à jour.

4) Crochets de destruction

Nettoyage après votre composant : crochets de destruction

Les hooks de destruction sont déclenchés avant qu’un composant ne soit supprimé du DOM. Cette étape est essentielle pour nettoyer les ressources telles que les minuteries ou les écouteurs d’événements.

avantDémontage()

  • But: Appelé juste avant la destruction de l’instance du composant.
  • Cas d’utilisation: Utilisé pour nettoyer des éléments tels que les écouteurs d’événements ou effacer les intervalles.

démonté()

  • But: Appelé après la destruction et la suppression du composant du DOM.
  • Cas d’utilisation : Tâches de nettoyage finales, telles que la suppression des écouteurs d’événements globaux ou l’arrêt des processus en cours.

Exemple: Nettoyer après une minuterie

<template>
    <div>
      <h2>Timer Component</h2>
      <p>Elapsed Time: {{ seconds }} seconds</p>
      <button @click="toggleTimer">Toggle Timer</button>
    </div>
  </template>
  
  <script>
  export default {
    data() {
      return {
        seconds: 0,     // Keeps track of elapsed time
        timer: null     // Stores the timer reference
      };
    },
    mounted() {
      console.log("Component mounted, starting timer...");
      this.startTimer(); // Start timer when component is mounted
    },
    beforeUnmount() {
      console.log("Component is about to be unmounted, clearing timer...");
      clearInterval(this.timer); // Clear timer before unmounting
    },
    unmounted() {
      console.log("Component has been unmounted!");
      // Any additional cleanup can be performed here
    },
  
    methods: {
      startTimer() {
        this.timer = setInterval(() => {
          this.seconds += 1; // Increment seconds every second
        }, 1000);
      },
      stopTimer() {
        clearInterval(this.timer); // Stop the timer
        this.timer = null;
      },
      toggleTimer() {
        if (this.timer) {
          this.stopTimer();
        } else {
          this.startTimer();
        }
      }
    }
  };
  </script>

Sortir:

Explication:

Dans cet exemple, le minuteur est démarré lorsque le composant est monté et arrêté lorsqu’il est sur le point d’être démonté, garantissant ainsi l’absence de fuite de mémoire.

Conclusion:

Les hooks de cycle de vie dans Vue.js offrent un moyen puissant de contrôler et de gérer le cycle de vie des composants. En comprenant quand et comment utiliser ces hooks, que ce soit pour l’initialisation, les mises à jour de données ou le nettoyage, vous pouvez améliorer considérablement les performances et la maintenabilité de vos applications Vue.

En tirant parti des étapes de création, de montage, de mise à jour et de destruction, vous pouvez optimiser le comportement de votre application, créer des interactions utilisateur transparentes et éviter les pièges courants tels que les fuites de mémoire ou les mises à jour DOM inefficaces.

La maîtrise des hooks de cycle de vie approfondira votre compréhension de Vue.js et vous permettra d’écrire des applications plus réactives et efficaces.

Ces révisions améliorent la clarté, la cohérence et la fluidité tout en renforçant les concepts fondamentaux des hooks de cycle de vie Vue.js.






Source link
Quitter la version mobile