Reacciona a cambios de estado con el método watch de Vue y la Composition API.
En ciertas ocasiones, cuando el estado de una aplicación o componente cambia, por ejemplo, como resultado de una llamada asíncrona, una modificación del DOM, etc., nos interesará estar atentos a este cambio y reaccionar para realizar otra acción. Con la Composition API de Vue podemos observar este cambio con el método watch, que ejecutará nuestra propia función que realice la acción derivada del cambio.
watchEl método watch nos permite observar valores reactivos y reaccionar a sus cambios. Su primer argumento permite varios tipos de valores reactivos para ser observados: un ref, una función getter o un array.
Veamos un ejemplo sencillo:
<script setup>import { ref, watch } from 'vue'
const count = ref(0);
watch(count, (newValue, oldValue) => { console.log(`El contador cambió de ${oldValue} a ${newValue}`);});
const incrementar = () => { count.value++;};</script>
<template> <div> <p>Contador: {{ count }}</p> <button @click="incrementar">Incrementar</button> </div></template>Aquí, cada vez que count cambie, watch detectará el cambio y ejecutará la función asociada, registrando los valores antiguo y nuevo en la consola.
watchEffect()watchEffect es otra forma de observar cambios en Vue. Se ejecuta inmediatamente y reacciona automáticamente a los valores reactivos utilizados dentro de su función sin necesidad de pasarlos por parámetro de forma explícita como con watch.
Ejemplo sencillo:
<script setup>import { ref, watchEffect } from 'vue';
const count = ref(0);
watchEffect(() => { console.log(`El contador es ahora: ${count.value}`);});
const incrementar = () => { count.value++;};</script>
<template> <div> <p>Contador: {{ count }}</p> <button @click="incrementar">Incrementar</button> </div></template>Aquí, watchEffect se ejecuta automáticamente al inicio y cada vez que count cambie.
watch y watchEffect?| Característica | watch | watchEffect |
|---|---|---|
| Requiere variables específicas a observar | Sí | No (detecta automáticamente) |
| Se ejecuta inmediatamente | No (espera un cambio) | Sí |
| Detecta valores usados dentro de su función | No | Sí |
En general, usa watch cuando necesitas comparar el valor anterior y el nuevo, y watchEffect cuando quieres reaccionar a cualquier valor reactivo utilizado dentro del efecto sin necesidad de declararlo explícitamente.
Vue 3 nos ofrece varios métodos para reaccionar a cambios en nuestros valores reactivos. watch es útil para observar variables específicas y gestionar cambios de forma más controlada, mientras que watchEffect es más conveniente para efectos reactivos inmediatos y automáticos. Comprender cuándo usar cada uno nos ayuda a escribir código más eficiente y organizado.