Trataré de simplificar esto:
.
Para definir watchers en Composition API, usamos la función watch()
, esta función recibe dos parámetros:
.
- Un objeto reactivo
- En handler del watcher
.
Entonces, con objeto reactivo nos referimos a algo que Vue pueda hacer tracking (recordemos las bases de la reactividad), un objeto reactivo puede ser un Proxy, esto es porque, si recordamos las primeras clases, nosotros podíamos convertir en Proxys los objetos, y cada que intentábamos acceder a una propiedad de ese objeto podíamos interceptarlo conget
. Pero los Proxys solo son fáciles de trabajar para reactividad con objetos (un JSON, un Arreglo, una función), pero son más complicados de trabajar con un valores planos (por ejemplo, un número o un string).
.
Es decir, imaginemos, ¿Cómo le aplicarías un Proxy a un objeto JSON? Fácil, le pasas dicho objeto al proxy, y pueden interceptar el get y el set porque tú puedes acceder y establecer propiedades dentro de un JSON, bien hasta ahí, pero ahora, ¿Cómo le aplicarías un proxy al número “0” por ejemplo? Es más dificl, no tienes un getter o un setter para ese tipo plano, no es un objeto que puedas acceder, es un tipo plano, por eso es que Watcher no acepta tipos planos.
.
Entonces, para solucionar esto, lo que hacemos es pasarle una función anónima que retorna ese tipo plano, una función sí puedes ser convertida en Proxy fácilmente, así que podemos acceder a sus getters y setters, y ya Vue hace el resto de la magia, es por eso que debemos mandar una función anónima en los watchers, así Vue puede convertirla en un Proxy y hacer su magia Vuetástica!
.
Dejo el código de esta clase:
.
https://github.com/RetaxMaster/vue3-platzi-commerce/tree/5437cefac6dbe4906e0f5fdb78a7854cffe0d9d6
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?