vuejs-ciclo-de-vida-componentes

Ciclo de vida de componentes en Vue.js

  • 4 min

El ciclo de vida de un componente en Vue.js es una serie de etapas por las que pasa un componente desde su creación hasta su destrucción.

Las etapas principales del ciclo de vida de un componente de Vue son:

  1. Creación: El componente se inicializa, se configuran sus propiedades (props) y se establece su estado inicial.
  2. Montaje: El componente se añade al DOM y se vuelve visible en la interfaz de usuario.
  3. Actualización: El componente se actualiza cuando cambian sus datos reactivos o propiedades.
  4. Destrucción: El componente se elimina del DOM y se liberan los recursos asociados para evitar fugas de memoria.

Hooks del ciclo de vida

Cada etapa tiene Hooks asociados que nos van a permitir ejecutar código en momentos específicos del ciclo de vida (si lo necesitamos).

HookDescripción
onBeforeMountSe ejecuta justo antes de que el componente se monte en el DOM.
onMountedSe ejecuta después de que el componente se ha montado en el DOM.
onBeforeUpdateSe ejecuta justo antes de que el componente se actualice.
onUpdatedSe ejecuta después de que el componente se ha actualizado.
onBeforeUnmountSe ejecuta justo antes de que el componente se destruya.
onUnmountedSe ejecuta después de que el componente se ha destruido.

Vamos a ver cada uno de ellos en profundidad 👇.

Hook onBeforeMount

El hook onBeforeMount se ejecuta justo antes de que el componente se monte en el DOM.

En esta etapa, el componente ha sido inicializado, pero aún no se ha añadido al DOM.

onBeforeMount(() => {
  console.log('El componente está a punto de montarse en el DOM');
});

Hook onMounted

El hook onMounted se ejecuta después de que el componente se ha montado en el DOM.

En esta etapa, el componente está completamente renderizado y es visible en la página.

onMounted(() => {
  console.log('El componente se ha montado en el DOM');
});

Hook onBeforeUpdate

El hook onBeforeUpdate se ejecuta justo antes de que el componente se actualice. Esto ocurre cuando cambian los datos reactivos o las propiedades del componente.

onBeforeUpdate(() => {
  console.log('El componente está a punto de actualizarse');
});

Hook onUpdated

El hook onUpdated se ejecuta después de que el componente se ha actualizado. En esta etapa, el DOM ha sido actualizado para reflejar los cambios en los datos.

onUpdated(() => {
  console.log('El componente se ha actualizado');
});

Hook onBeforeUnmount

El hook onBeforeUnmount se ejecuta justo antes de que el componente se destruya.

En esta etapa, el componente aún está en el DOM, pero está a punto de ser eliminado.

onBeforeUnmount(() => {
  console.log('El componente está a punto de destruirse');
});

Hook onUnmounted

El hook onUnmounted se ejecuta después de que el componente se ha destruido.

En esta etapa, el componente ha sido eliminado del DOM y se han liberado los recursos asociados.

onUnmounted(() => {
  console.log('El componente se ha destruido');
});

Cómo usar los hooks del ciclo de vida

Para usar los hooks del ciclo de vida del componente usando la Composition API, los tenemos disponibles como funciones que llamaremos dentro de la función setup.

Por ejemplo, aquí os pongo un fragmento de código donde se usan todos los Hooks para ver su uso.

<template>
  <div>
    <h1>Contador: {{ count }}</h1>
    <button @click="incrementar">Incrementar</button>
  </div>
</template>

<script setup>
import { ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue';

const count = ref(0);

function incrementar() {
  count.value++;
}

// Hooks del ciclo de vida
onBeforeMount(() => {
  console.log('El componente está a punto de montarse en el DOM');
});

onMounted(() => {
  console.log('El componente se ha montado en el DOM');
});

onBeforeUpdate(() => {
  console.log('El componente está a punto de actualizarse');
});

onUpdated(() => {
  console.log('El componente se ha actualizado');
});

onBeforeUnmount(() => {
  console.log('El componente está a punto de destruirse');
});

onUnmounted(() => {
  console.log('El componente se ha destruido');
});
</script>

<style>
button {
  padding: 10px 20px;
  font-size: 16px;
  cursor: pointer;
}
</style>

En este ejemplo,

  • Hemos utilizado todos los hooks principales del ciclo de vida
  • Cada hook imprime un mensaje en la consola en la etapa correspondiente del ciclo de vida.

Normalmente nunca vas a necesitar todos los hooks. Esto es solo una demo para que puedas ver su funcionamiento.

Ejemplo práctico