Computed en Vue Composition API
Clase 33 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
08:19 min - 32

Computed properties vs watchers en Vue
05:17 min - 33

Computed en Vue Composition API
Viendo ahora - 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
Las propiedades computadas en Vue con el Composition API permiten reemplazar watchers innecesarios y simplificar la lógica reactiva. Aquí verás cómo usar la función computed para derivar valores como el color del precio según stock y el total del carrito, manteniendo el código claro, predecible y fácil de mantener.
¿Cómo crear propiedades computadas con Composition API?
Para crear una propiedad computada en Composition API se importa la función computed desde Vue y se define una función que depende de datos reactivos. Si esas dependencias cambian, la propiedad se recalcula automáticamente.
- Importar y definir con función pura.
- Basar el cálculo en dependencias reactivas.
- Exponer la variable cuando no está dentro de reactive.
¿Qué hace computed y cuándo se recalcula?
La función computed recibe una función que usa dependencias reactivas. Si alguna cambia (por ejemplo, el stock del producto), el valor computado se actualiza sin necesidad de un watcher manual.
Ejemplo como variable independiente (se debe retornar en el estado):
import { computed } from 'vue'
const priceColor = computed(() => {
// si el stock es menor o igual a 1: rojo, si no: azul
return props.product.stock <= 1 ? 'red' : 'blue'
})
// ...luego exponerla en el return del setup
return { priceColor }
¿Cómo exponer la propiedad en el estado?
Si la propiedad computada se crea como variable (fuera de reactive), hay que retornarla en el estado del componente. Esto reemplaza al watcher que antes modificaba el color del precio y mantiene la lógica declarativa.
¿Cómo definir computed dentro de reactive?
También se puede definir la propiedad computada directamente dentro de un objeto reactive. En este caso, no necesitas retornarla por separado porque ya forma parte del estado.
- Declaración inline con operador ternario.
- Menos código repetido al no retornarla explícitamente.
- Lectura directa desde el estado reactivo.
Ejemplo dentro del estado del producto:
import { reactive, computed } from 'vue'
const productState = reactive({
// otras propiedades del producto...
priceColor: computed(() => (props.product.stock <= 1 ? 'red' : 'blue')),
})
// productState ya se retorna, no hace falta exponer priceColor aparte
Beneficios clave: - Menos boilerplate al integrar la lógica en el estado. - Reactividad predecible: se recalcula según sus dependencias. - Legibilidad: la intención queda cerca de los datos.
¿Cómo calcular el total del carrito con una propiedad computada?
El watcher general que observaba el carrito se puede comentar y reemplazar por una propiedad computada llamada total. La idea: usar una reducción para sumar los montos de los ítems.
- Crear total como variable computada y retornarla.
- O definir total directamente dentro de reactive del carrito.
- Mantener el cálculo declarativo y derivado de sus dependencias.
Como variable independiente:
import { computed } from 'vue'
const total = computed(() =>
// sumar el monto de cada ítem del carrito
cartState.cart.reduce((acc, item) => acc + /* valor del ítem */, 0)
)
return { total }
Dentro del estado del carrito:
import { reactive, computed } from 'vue'
const cartState = reactive({
cart: [],
total: computed(() =>
cartState.cart.reduce((acc, item) => acc + /* valor del ítem */, 0)
),
})
// no es necesario retornar total por separado
Palabras clave y habilidades aplicadas: - Composition API y Options API: enfoques para organizar la reactividad. - computed: derivar valores a partir de dependencias reactivas. - reactive: agrupar estado y propiedades computadas en un mismo objeto. - watcher: evitado cuando la lógica puede escribirse como propiedad computada. - Dependencias reactivas: disparan el recálculo automático. - Operador ternario: simplifica condiciones como stock bajo/alto. - reduce: cálculo del total del carrito de forma declarativa.
¿Te gustaría ver ejemplos con más condiciones, como descuentos en el total o colores por rangos de stock? Deja tu comentario y cuéntame qué casos prácticos quieres resolver.