VueJS

Explicación de watch en Vue JS 2

Introducción

Vue.Js es un framework maravilloso. Ofrece, al igual que AngularJS (y no sé cuáles otros, no los he usado) una forma de vigilar el cambio de un valor a través de un watch, watcher u observador.

Esto permite observar el cambio de una variable, ya sea primitiva o compleja como un objeto o arreglo.

Veamos entonces cómo usar de forma correcta a watch en el framework web de JavaScript Vue.js

Watch en VueJS

Watch sirve para vigilar variables que pertenecen a nuestra app. Por ejemplo, si en la data tenemos a la propiedad nombre así:

See the gist on github.

No te confundas por la función, estamos usando sintaxis de funciones flecha.

El nombre, al inicio, es una cadena vacía. Ahora, para vigilarlo podemos hacer esto:

See the gist on github.

Aquí viene lo importante. Definimos a watch como un objeto, y las propiedades de ese objeto son funciones. Cada función debe tener exactamente el mismo nombre que la variable que estamos vigilando.

Cuando cambie el valor, el framework se encargará de llamar a esa función. Le pasará 2 argumentos, en el siguiente orden: el nuevo valor y el valor anterior.

Es decir, el valor que estaba antes del cambio, y el valor actualizado.

Ejemplo de watch simple en Vue

Para probar todo lo de arriba, hagamos una app de prueba. Importamos a Vue, y en nuestro script ponemos lo siguiente:

See the gist on github.

Luego, en el archivo HTML ponemos esto:

See the gist on github.

Lo que hacemos es ligar el input con el modelo de nuestra app. Ahora sí, cada que cambie el valor, en la consola se escribirá lo que pasa.

Si no me crees, pruébalo tú mismo en este pen.

Si abres la consola, se verá algo así:

Demostración de watch en vuejs 2

No importa si el usuario escribe, pega o arrastra texto, el watch se dará cuenta porque por ello es un vigilante.

Watch con profundidad: vigilar objetos

Ahora veamos otra cosa interesante y es que también podemos vigilar cuando un objeto cambia, o mejor dicho, cuando la propiedad de un objeto cambia.

Para esto la sintaxis es diferente. Si tenemos un objeto así en nuestros datos…

See the gist on github.

Ya no podemos vigilarlo como un dato primitivo, debemos vigilarlo de manera profunda. Así que, usamos esto:

See the gist on github.

Lo que cambia es que ahora en lugar de poner el nombre del dato como función, lo ponemos como objeto. Y ese objeto tiene 2 propiedades: el handler o manejador, y una propiedad que indica si queremos que sea una observación profunda (con deep: true).

Aclaración sobre la consola: cuando se imprime, el objeto (anterior y nuevo) es el mismo.

Esto pasa por las referencias de JavaScript, las cuales al momento de que imprime apuntan al mismo objeto, no por error del código.

Así que no imprime datos correctos, pero sí está vigilando.

Además, cada que vemos una propiedad se invoca al getter, el cual estará apuntando a la versión más reciente.

Pruébalo aquí.

Cada que cambiemos el nombre o la edad de la mascota (y si hubieran otras propiedades, también se desencadenaría) se llamará a la función y se nos pasará el objeto completo.

Vigilar arreglos

Es lo mismo que vigilar valores normales. Es decir, no necesitamos una observación profunda. Tal vez sería necesario que sea profundo en caso de que ese arreglo tenga objetos, pero si no, no hay problema.

Para ejemplificar, tenemos esto:

See the gist on github.

Un nombre que pondremos en el arreglo, y un arreglo de nombres.

Más adelante podemos definir el método para añadir el nombre al arreglo:

See the gist on github.

Y poner un watcher:

See the gist on github.

Por cierto, lo de la consola (explicado arriba) sigue pasando, pero sí estamos vigilando.

Puedes ver el ejemplo aquí.

Otras cosas importantes

Podemos definir más watchers, ya que watch es un objeto, por lo tanto podemos tener los watchers u observadores que necesitemos.

Lo de las referencias en JavaScript es otro tema, pero ten por seguro que el watch funciona. Esto de las referencias pasa porque se refrescan los objetos en la consola; una forma de eliminar las referencias es creando un objeto fresco.

¿Watch o @change?

No recomiendo usar watch cuando podemos usar un simple @change.

Por ejemplo, si queremos saber cuando un input es actualizado, simplemente le ponemos <input type="text" @change="funcionQueSeraLlamadaCuandoCambie">.

Watch es útil cuando no queremos poner muchos @change, ahorrándonos listeners.

O simplemente cuando queremos observar una variable porque sí; pero recuerda que siempre existirá el evento @change en el elemento input, select y otros más.

Este tutorial fue escrito para explicar cómo usar watch, pero eso no significa que lo debas usar siempre que puedas. En resumen, explica cómo, no por qué ni cuándo.

Eso sí, si queremos vigilar un objeto (por cualquier cosa) no hay forma elegante de hacerlo en un evento del DOM, necesariamente tendríamos que usar watch.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

5 días hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

5 días hace

Imprimir PDF generado con HTML

Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…

6 días hace

JavaScript: llenar select con arreglo

En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…

2 semanas hace

Imprimir PDF a partir de URL

En este artículo se presenta una guía para imprimir un PDF a partir de una…

2 semanas hace

Imprimir PDF a partir de base64

En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…

2 semanas hace

Esta web usa cookies.