Contenido del curso
Built-in Components
Componentes personalizados
Composition API
- 12

Composition API: setup en Vue 3
08:13 min - 13

Hooks del ciclo de vida en Vue 3 setup
05:18 min - 14

`ref` y `reactive` en Vue Composition API
Viendo ahora - 15

Watchers con Composition API en Vue.js
05:32 min - 16

Propiedades computadas con Composition API
07:10 min - 17

Props reactivos con toRefs en Vue.js
05:26 min - 18

El argumento context en Vue 3 setup
08:33 min - 19

provide e inject en Vue Composition API
05:00 min - 20

Template Refs en Vue 3 con Composition API
05:33 min - 21

Composition API vs Options API en Vue.js
07:26 min - 22

script setup en Vue 3 sin export default
06:34 min
Cierre del curso
`ref` y `reactive` en Vue Composition API
Resumen
Crear variables reactivas en Composition API de Vue.js cambia la forma en que defines el estado dentro de un componente. En lugar de declarar datos en la opción data, ahora trabajas con funciones como ref y reactive dentro de setup, lo que te da más control y te permite escribir lógica con JavaScript puro sin perder la reactividad.
Esta guía es para ti si vienes de Options API y quieres entender cómo declarar valores que se actualizan solos en la vista cuando cambian en el código.
Cómo se declara una variable reactiva con ref en Vue
La función ref crea una referencia reactiva a un dato. La importas directamente desde Vue y la usas dentro de setup para envolver el valor que quieres observar.
js import { ref } from 'vue'
export default { setup() { const text = ref('Hola, Vue') const counter = ref(0)
setInterval(() => { counter.value++ }, 500) return { text, counter }
} }
Fíjate en dos detalles que marcan toda la diferencia:
- Para leer o reasignar el valor dentro de
setup, siempre usas.value. - En el template no necesitas
.value; Vue lo resuelve automáticamente. - Para que la variable esté disponible en el template, la incluyes en el
returndesetup.
¿Qué hace ref en Vue 3? Crea una referencia reactiva a un valor primitivo como un número, string o booleano. Accedes a ese valor con
.valuedentro del script y directamente por su nombre en el template.
Por qué necesitas usar .value con ref
Cuando envuelves un valor con ref, Vue devuelve un objeto contenedor. Ese contenedor expone la propiedad value, que es la que el sistema de reactividad observa.
Si intentas reasignar la variable sin .value, rompes la referencia y Vue deja de detectar el cambio. Por eso la convención es estricta: dentro del script, siempre .value.
El ejemplo del setInterval lo deja claro. Cada 500 milisegundos se ejecuta counter.value++ y la vista se actualiza sola, sin necesidad de un hook mounted ni de declarar el dato en data. Es JavaScript plano apoyado por la reactividad de Vue.
Cuándo usar reactive en lugar de ref
ref funciona perfecto para tipos primitivos, pero cuando trabajas con objetos conviene usar reactive. Esta función toma un objeto completo y lo convierte en reactivo, sin obligarte a usar .value en cada propiedad.
js import { reactive } from 'vue'
export default { setup() { const obj = reactive({ counter: 0 })
setInterval(() => { obj.counter++ }, 500) return { obj }
} }
La diferencia práctica es esta:
- Con
ref, accedes convariable.value. - Con
reactive, accedes conobjeto.propiedad. - En el template, ambos se usan sin sintaxis adicional.
¿Cuál es la diferencia entre ref y reactive?
refenvuelve valores primitivos como strings, números o booleanos y requiere.value.reactiveenvuelve objetos y permite acceder a sus propiedades de forma directa.
Qué pasa si usas ref con un objeto
En la clase ocurre justo eso: al envolver un objeto con ref, aparece un error al intentar leer la propiedad. La solución es cambiar a reactive, que está pensado para estructuras complejas. Esa es la regla práctica que conviene memorizar.
Cómo expone setup las variables al template
El puente entre la lógica y la vista es el return de la función setup. Todo lo que devuelvas en ese objeto queda disponible en el template del componente.
Esto reemplaza el comportamiento que antes lograbas con data, y te da una ventaja extra: dentro de setup puedes mezclar declaraciones, llamadas a funciones, setInterval, condicionales y cualquier construcción de Vanilla JavaScript. La reactividad sigue funcionando mientras respetes la convención de .value en los ref.
¿Necesito devolver las variables en setup? Sí. Solo lo que retornas desde
setupestá disponible en el template. Si no lo incluyes en elreturn, Vue no puede renderizarlo.
Un punto importante: si declaras una variable normal sin ref ni reactive, Vue no la observa. Aunque cambie su valor en memoria, la vista nunca se va a actualizar. Esa conciencia de qué es reactivo y qué no es lo que te da control real sobre el componente.
Con estas dos funciones ya tienes la base para construir cualquier estado dentro de Composition API. ¿Cuál crees que vas a usar más en tus componentes, ref o reactive? Cuéntame en los comentarios cómo lo estás aplicando en tu proyecto.