Watchers en Vue Composition API
Clase 31 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
08:53 min - 31

Watchers en Vue Composition API
Viendo ahora - 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 watchers en Vue Composition API con confianza: aprende a observar cambios reales, evitar imports erróneos y reaccionar al estado sin fricción. Aquí verás cómo ajustar estilos por stock, calcular totales del carrito y entender por qué algunas fuentes requieren funciones anónimas. Todo con código claro y directo.
¿Cómo crear watchers en Vue Composition API de forma correcta?
Para observar una propiedad en Composition API usamos la función watch de Vue. Es clave traerla desde Vue y pasarle una fuente reactiva. Si la propiedad no es una referencia directa, conviene usar una función anónima que devuelva esa propiedad para que Vue la rastree correctamente.
- Importa siempre desde Vue. Evita auto-imports de Node.js.
- Pasa una fuente reactiva o una función que la retorne.
- Usa el handler con valor actual y valor antiguo.
- Imprime para depurar sin bloquear la UI.
¿Por qué importar watch desde Vue y no desde Node.js?
A veces el editor sugiere imports incorrectos. Asegúrate de traerlo de 'vue', no de paquetes de Node.js. Un import equivocado rompe la reactividad y lanza warnings.
// correcto
import { watch } from 'vue';
// evita imports accidentales de Node.js
// import { watch } from 'node:fs'; // ❌
// import watch from 'node:watch'; // ❌
¿Cómo observar propiedades no reactivas con una función anónima?
Si observas un valor plano (por ejemplo, un número dentro de un objeto reactivo), watch necesita una función que lo devuelva. Observar directamente el valor pasa un literal y no una fuente reactiva.
import { reactive, watch } from 'vue';
const productState = reactive({
activeImage: 0,
});
// incorrecto: pasa el valor 0, no una fuente reactiva
// watch(productState.activeImage, (nuevo, antiguo) => { ... });
// correcto: función que retorna la propiedad a observar
watch(() => productState.activeImage, (nuevo, antiguo) => {
console.log('activeImage actual:', nuevo, 'anterior:', antiguo);
});
¿Qué recibe el handler y para qué sirve?
El handler recibe el valor actual y el antiguo. Úsalo para depurar o disparar efectos colaterales controlados.
- valor actual: estado más reciente tras el cambio.
- valor antiguo: estado antes del cambio.
- patrones comunes: logs, validaciones, sincronización de estado.
¿Cómo cambiar estilos con cambios de stock del producto?
El color del precio puede reaccionar al stock. Cuando el stock sea crítico, cambia la UI para alertar al usuario. Define primero el estado del color y observa el stock desde props con una función.
import { reactive, watch } from 'vue';
const productState = reactive({
priceColor: 'rgb(73, 155, 234)', // azul inicial
});
// observar el stock que viene de props
watch(() => props.product.stock, (stockActual) => {
if (stockActual <= 1) {
productState.priceColor = 'rgb(255, 87, 87)'; // rojo crítico
}
});
- priceColor: estado reactivo para estilos dinámicos.
- props.product.stock: fuente no ref, obsérvala con función.
- condición crítica: stock menor o igual a 1 activa color rojo.
- beneficio: feedback visual inmediato en la vista.
¿Cómo calcular el total del carrito con un watcher sobre un arreglo proxy?
Al observar arreglos u objetos reactivamente creados, Vue los convierte en proxy. Así, no necesitas opciones adicionales para escuchar cambios internos: cualquier mutación en el arreglo dispara el watch.
- cartState.cart es un arreglo reactivo: se observa como proxy.
- no hace falta pasar deep: Vue ya rastrea sus claves internas.
- cuando cambia el carrito, recalcula el total con reduce.
import { reactive, watch } from 'vue';
const cartState = reactive({
cart: [],
total: 0,
});
watch(() => cartState.cart, (nuevo, antiguo) => {
cartState.total = cartState.cart.reduce((acc, p) => {
// sumar precio por cantidad de cada producto
return acc + (p.price * p.quantity);
}, 0);
});
Conceptos clave integrados: - watch: observa fuentes reactivas y ejecuta un handler al cambiar. - función anónima como fuente: necesaria para valores planos como números. - proxy de Vue: objetos y arreglos reactivos que exponen cambios internos. - reduce: agrega valores para calcular totales del carrito. - estados vinculados: priceColor y total dependen del stock y del contenido del carrito.
¿Te topaste con algún caso retador usando watch en Composition API? Cuéntalo en comentarios y comparte cómo lo resolviste.