¿Cuándo usarías `computed`, `watch` o `watchEffect` y qué errores aparecen al confundirlos?
¿Cuándo usarías `computed`, `watch` o `watchEffect` y qué errores aparecen al confundirlos? en Vue senior: explicación técnica directa, decisiones de diseño...
Difícil ReactividadWatchersEfectos
Respuesta
computedes la opción correcta para estado derivado, debe ser puro y aprovecha caché según dependencias reactivas.watches mejor cuando necesitas una fuente explícita, acceso a valores anterior y nuevo, o cleanup controlado de un efecto.watchEffectva bien cuando las dependencias son varias y evidentes, pero pierde claridad si el efecto crece o toca demasiadas cosas.
Puntos clave
computeddebe ser puro y servir para derivar; cuando introduces efectos laterales ahí, el modelo mental deja de ser fiable.watchywatchEffectson herramientas para sincronizar con el exterior, no para construir una cadena de estado derivado.- En Vue conviene distinguir siempre fuente de verdad, dato derivado y efecto externo porque casi todos los bugs reactivos rompen una de esas fronteras.
Errores comunes
- Usar watchers para derivar datos que podrían salir de
computedintroduce sincronizaciones manuales y fallos difíciles de seguir. - Copiar valores reactivos a variables locales sin
toRefsostoreToRefsrompe la relación con la fuente de verdad.
Ejemplo de código
export function useUserSearch() {
const query = ref("");
const results = ref<User[]>([]);
watch(query, async (value, _, onCleanup) => {
const controller = new AbortController();
onCleanup(() => controller.abort());
results.value = await fetchUsers(value, controller.signal);
});
}
Ejemplo o caso real
En una pantalla con filtros, carga remota y varios estados locales, estas decisiones afectan directamente a si la UI se mantiene estable o empieza a comportarse de forma impredecible.
Idea clave
Si separo fuente de verdad, derivación y efecto, la mayoría de problemas reactivos pierden fuerza.
¿Completaste esta sección?
Marcarla como leída actualiza tu progreso.