Computed properties en Vue.js

Resumen

Las computed properties en Vue.js te permiten crear variables reactivas que dependen de otras y devuelven un nuevo valor transformado. Son ideales para mostrar datos formateados o combinados en tu template sin ensuciar la vista con lógica de JavaScript. Si estás aprendiendo Vue.js y quieres escribir código más limpio y reutilizable, este recurso te va a servir.

¿Por qué necesitas computed properties en tu template?

Imagina que estás armando una página de perfil de usuario. Tienes dos variables reactivas dentro de tu objeto data: firstName con valor Diana y lastName con valor Martínez. Las quieres mostrar juntas como si fueran una sola cadena.

Una primera solución es concatenarlas directamente en el template usando interpolación:

html

<p>{{ firstName }} {{ lastName }}</p>

Eso funciona. Para el usuario se ve como un solo texto, aunque en el modelo de datos sigan siendo dos variables. ¿Pero qué pasa cuando necesitas concatenar más cosas o aplicar formatos? Ahí empiezan los problemas.

¿Qué problema aparece al meter lógica compleja en el template?

Supón que tienes una variable now con la fecha actual. Si la imprimes tal cual, JavaScript te devuelve un formato larguísimo y poco legible. Para mostrarla bonita podrías hacer algo así:

html

<p>{{ now.toLocaleDateString() }}</p>

Funciona, sí. Pero el template empieza a llenarse de JavaScript. Y aquí viene el detalle: el template no es el lugar correcto para meter lógica pesada. Se vuelve verboso, poco legible y difícil de mantener cuando agregas más casos.

¿Qué es una computed property en Vue.js? Es una función reactiva que devuelve un valor calculado a partir de otras variables. Cuando esas variables cambian, la computed se actualiza automáticamente.

¿Cómo se declara una computed property en Vue.js?

Vue.js te da una opción llamada computed dentro del componente, separada de data y methods. Ahí declaras funciones que retornan el valor que quieres mostrar [04:00].

Para unir nombre y apellido en una sola variable llamada fullName, escribes algo así:

javascript computed: { fullName() { return this.firstName + ' ' + this.lastName; } }

Después, en el template, la usas como cualquier otra variable:

html

<p>{{ fullName }}</p>

En pantalla sigue viéndose Diana Martínez, pero a nivel de código tienes una sola variable que encapsula la lógica. Y lo mejor: la puedes reutilizar en otras partes del componente.

¿Cómo formatear una fecha con una computed property?

El mismo patrón aplica para fechas. En lugar de llamar a toLocaleDateString dentro del template, creas una computed llamada today que se encargue del formato [05:30].

javascript computed: { today() { return this.now.toLocaleDateString(); } }

Ahora en el template solo escribes {{ today }} y listo. La lógica queda encapsulada y el template se mantiene limpio.

¿Qué hace especiales a las computed properties frente a un método?

La pregunta que más se repite cuando aprendes Vue.js es esta: si un método con return también funciona desde el template, ¿para qué usar computed?

La respuesta corta: reactividad. Las computed properties reaccionan automáticamente a los cambios de las variables de las que dependen. Si modificas firstName de Diana a Miguel, la variable fullName se actualiza sola sin que tengas que hacer nada manual.

¿Cuándo uso una computed property y cuándo un método? Usa computed cuando el valor depende de otras variables reactivas y quieres que se actualice solo. Usa un método cuando necesitas ejecutar una acción concreta, como enviar un formulario o disparar un evento.

Las ventajas concretas de las computed properties son:

  • Son totalmente reactivas sin configuración extra.
  • Permiten encapsular lógica fuera del template.
  • Se pueden reutilizar en distintas partes del componente.
  • Hacen el código más legible y mantenible.
  • Funcionan también dentro de methods y otras secciones de Vue.

¿Dónde puedo usar una computed property además del template?

Aunque su uso principal es en templates, también puedes llamarlas desde métodos y otras partes de Vue. Esto te da flexibilidad para construir lógica reutilizable que siempre estará sincronizada con tus datos base.

La magia está justo ahí: separas bloques de código reutilizables, los mantienes reactivos y escribes una sintaxis más limpia en todo tu proyecto Vue.js. ¿Ya pensaste qué computed properties podrías agregar a tu próximo componente? Cuéntame en los comentarios cómo las estás usando.