Lifecycle Hooks en Vue.js: una mirada clara y didáctica

Desde setup() hasta unmounted(): conoce cada etapa del ciclo de vida en Vue.js.

Creación del componente (Instanciación)

🧩setup()

Este es el primer lugar donde puedes colocar lógica reactiva: ref, reactive, computed, watch, etc.

Es como cuando estás preparando los ingredientes antes de cocinar. No estás en la cocina aún, pero ya tienes todo listo.
js
CopyEdit
<script setup>
import { ref } from 'vue';

const mensaje = ref('Hola');
</script>

Montaje del componente

🔹 beforeMount()

Se ejecuta justo antes de insertar el HTML en el DOM. Aún no puedes acceder a los elementos del DOM.

🍳 Encendiste la estufa y estás por poner la sartén, pero aún no hay nada cocinándose.

🔹 mounted()

Se ejecuta cuando el componente ya está en el DOM. Aquí sí puedes usar document, acceder a refs del DOM, llamar APIs, etc.

🍽️ La comida está servida en la mesa, lista para disfrutarla.
js
CopyEdit
import { onMounted } from 'vue';

onMounted(() => {
  console.log('El componente fue montado 🎉');
});
Analógicamente: Ya serviste la comida, ahora puedes comerla.

Actualización

Cada vez que cambias algo reactivo (ref, reactive...), Vue vuelve a renderizar el DOM, y puedes reaccionar con estos hooks:

🔹 beforeUpdate()

Antes de que se actualice el DOM. Puedes revisar el estado actual y compararlo.

🧂 Estás por probar la comida para ver si le falta sal, pero aún no hiciste cambios.

🔹 updated()

Después de actualizar el DOM. Ideal para trabajar con efectos visuales, animaciones, etc.

✨ Ya agregaste sal y diste la primer probada. Todo quedó más sabroso.
js
CopyEdit
import { onUpdated } from 'vue';

onUpdated(() => {
  console.log('El componente se actualizó ✨');
});

Destrucción (Desmontaje)

Cuando Vue elimina un componente del DOM (por ejemplo, al cambiar de ruta):

🔹 beforeUnmount()

Antes de que se elimine del DOM.

🧼 Ya terminaste de comer y estás por levantarte a lavar los platos.

🔹 unmounted()

Después de ser eliminado. Útil para limpiar listeners, timeouts o efectos secundarios.

🧽 Platos lavados, cocina limpia. Todo listo para empezar otra receta.
js
CopyEdit
import { onUnmounted } from 'vue';

onUnmounted(() => {
  console.log('Bye bye componente 👋');
});