Watchers en Vue Options API
Clase 30 de 37 • Curso de Reactividad con Vue.js 3
Contenido del curso
Reactividad a profundidad
- 6

Paradigma reactivo: responsivo, resiliente y escalable
03:49 min - 7

Proxies: la clave de la reactividad Vue
06:29 min - 8

Creando tu primer mini framework reactivo
07:04 min - 9

Integrar Proxy para crear mini framework reactivo
06:06 min - 10

Refleja tu lógica mantenible con JavaScript
09:29 min - 11

Conceptos clave de reactividad: efectos, track y trigger
03:53 min - 12

Efectos trackers triggers: cómo Vue vincula datos
07:39 min
Templates de Vue.js
- 13
Templates de HTML en Vue.js: Mejores Prácticas Esenciales
00:21 min - 14

Estructura inicial de Platzy Commerce con Vue
06:52 min - 15

Expresiones JavaScript en templates Vue
06:49 min - 16

v-bind y clase reactiva en Vue.js
06:08 min - 17

v-show vs v-if en Vue: cuándo usar cada uno
08:53 min - 18

Directiva v-for para listas en Vue.js
08:14 min - 19

Eventos con v-on en templates de Vue
06:49 min
APIs internas de Vue.js
Segunda capa: componentes de Vue.js
- 25

Crear componentes reutilizables con Vue
06:56 min - 26

Cómo pasar datos de padre a hijo en Vue
14:13 min - 27
Creación de Componentes Personalizados en Aplicaciones Web
00:37 min - 28

Eventos personalizados en Vue: comunicar hijo a padre
04:27 min - 29

Eventos personalizados con Composition API
03:57 min - 30

Watchers en Vue Options API
Viendo ahora - 31

Watchers en Vue Composition API
08:19 min - 32

Computed properties vs watchers en Vue
05:17 min - 33

Computed en Vue Composition API
06:20 min - 34

Ciclos de vida en Vue: cuándo y cómo cargar datos
08:19 min - 35

Ciclos de vida en Composition API
06:03 min
Siguientes pasos
Domina los cambios en tus datos con watchers en Vue. A partir de las propiedades reactivas que Vue gestiona con proxies, aquí se muestra cómo observar dependencias y reaccionar con precisión: desde cambiar estilos según el stock hasta calcular el total del carrito con observación profunda en la Options API. También se anticipa su uso en la Composition API.
¿Cómo funcionan los watchers en Vue Options API?
Los watchers permiten observar propiedades reactivas y ejecutar efectos colaterales controlados. En cada observador, Vue pasa el valor actual y el valor anterior, lo que facilita entender el cambio.
- Observa un índice activo como
activeImagepara vervalueyoldValueen consola. - Útil para depurar cambios en UI, por ejemplo, al alternar thumbnails.
export default {
// ...
watch: {
activeImage(value, oldValue) {
console.log(value, oldValue);
}
}
}
Ideas clave:
- watch en la Options API escucha cualquier propiedad reactiva disponible.
- Recibe (valorActual, valorAnterior) para lógica condicional precisa.
¿Cómo cambiar el color del precio según el stock?
Se liga un estilo dinámico al precio y se actualiza con un watch de una ruta específica: 'product.stock'. Si el stock es menor o igual a 1, el color pasa de azul a rojo.
<template>
<p :style="{ color: priceColor }">{{ precio }}</p>
</template>
<script>
export default {
data() {
return {
priceColor: 'rgb(0, 0, 255)' // valor RGB azul.
};
},
watch: {
'product.stock'(stock) {
if (stock <= 1) this.priceColor = 'rgb(255, 0, 0)'; // cambia a rojo.
}
}
};
</script>
Puntos a reforzar:
- Rutas con string en watch como 'product.stock' para escuchar propiedades anidadas.
- Estilos reactivos con :style que reflejan el estado del negocio de forma inmediata.
- Reutilización del componente: el cambio de color se replica donde se use.
¿Cómo calcular el total del carrito con un watcher profundo?
Para un carrito que es un arreglo con objetos, se requiere un watch con observación profunda. Así cualquier cambio interno activa el cálculo del total con reduce.
<template>
<p>{{ new Intl.NumberFormat('es-CO', { style: 'currency', currency: 'COP' }).format(total) }}</p>
</template>
<script>
export default {
data() {
return {
cart: [],
total: 0
};
},
watch: {
cart: {
handler(newCart) {
this.total = newCart.reduce((sum, p) => sum + p.price * p.quantity, 0);
},
deep: true // observa objetos y propiedades internas.
}
}
};
</script>
Claves técnicas y de diseño:
- Usa objeto con handler y deep: true para arreglos de objetos donde cambian propiedades internas.
- reduce suma precios por cantidades de cada producto del carrito.
- Formatea con la Internationalization API de JavaScript: Intl.NumberFormat('es-CO', { style: 'currency', currency: 'COP' }) para pesos colombianos.
- La reactividad mantiene el total correcto incluso al aplicar descuentos o modificar cantidades.
¿Te gustaría ver esta misma lógica con la Composition API o aplicar validaciones adicionales al carrito? Comparte tus dudas y casos en los comentarios.