Fundamentos de Reactividad
Preferencias de API
Esta página y muchos otros capítulos posteriores en la guía tienen contenido diferente para la Options API y la Composition API. Tu preferencia actual es Composition API. Puedes alternar entre los estilos de API usando el interruptor de "Preferencia de API" en la parte superior de la barra lateral izquierda.
Declarando el Estado Reactivo
ref()
En la Composition API, la manera recomendada de declarar el estado reactivo es utilizando la función ref()
:
js
import { ref } from 'vue'
const count = ref(0)
ref()
toma el argumento y lo retorna envuelto en un objeto ref con una propiedad .value
:
js
const count = ref(0)
console.log(count) // { value: 0 }
console.log(count.value) // 0
count.value++
console.log(count.value) // 1
Mira también: Escribir Refs
Para acceder a las refs en la template de un componente, las declaramos y retornamos desde una función setup()
del componente:
js
import { ref } from 'vue'
export default {
// `setup` es un hook especial dedicado para la Composition API.
setup() {
const count = ref(0)
// expone la ref a la template
return {
count
}
}
}
template
<div>{{ count }}</div>
Observa que no necesitamos agregar .value
cuando usamos la ref en la template. Por conveniencia, las refs son automáticamente desempaquetadas cuando son usadas dentro de las templates (con unas pocas advertencias).
También puedes mutar una ref directamente en los manejadores de eventos:
template
<button @click="count++">
{{ count }}
</button>
Para lógica más compleja, podemos declarar funciones que muten las refs en el mismo ámbito y las expongan como métodos al lado del estado:
js
import { ref } from 'vue'
export default {
setup() {
const count = ref(0)
function increment() {
// .value es necesario en JavaScript
count.value++
}
// no olvides exponer también la función.
return {
count,
increment
}
}
}
Los métodos expuestos pueden ser usados entonces como manejadores de eventos:
template
<button @click="increment">
{{ count }}
</button>
Aquí está el ejemplo interactivo en Codepen, sin usar ninguna herramienta de construcción.