Métodos personalizados con Composition API
Clase 23 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
06:20 min - 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
Aprende a crear métodos personalizados con Composition API sin complicarte con la magia del Options API. Verás cómo manejar referencias reactivas, usar .value correctamente, conectar eventos como key up y construir funciones como apply discount y add to cart que interactúan de forma clara con tu template.
¿Cómo crear métodos personalizados con Composition API?
Trabajar en setup es directo e imperativo. Definimos referencias para la información reactiva y creamos funciones como en cualquier app de JavaScript. No hay que ubicarlas dentro de options: simplemente se definen y se retornan desde setup para usarlas en el template.
- Define referencias para códigos de descuento, producto y carrito.
- Crea funciones puras y pásalas al template.
- Evita depender de this: en setup no existe this.
¿Por qué en setup no existe this?
Dentro de setup trabajas con funciones de nivel superior y variables en tu alcance directo. No hay this que apunte al componente. Por eso accedes a las referencias que definiste, como discount codes, product o cart, sin usar this.
- Usa referencias reactivas y su .value para leer/escribir datos.
- Piensa de forma imperativa: defines y usas lo que necesitas.
¿Cómo aplicar un descuento con apply discount y event?
Se define una función, por ejemplo applyDiscount, y se retorna desde setup para invocarla desde el template. En el template se le pasa el flag especial de event que contiene la información del evento de JavaScript (como key up).
- La búsqueda de códigos se hace sobre discount codes usando .value.
- Evita acceder a product directo: usa product.value.
- Al presionar Enter en key up, el descuento se aplica correctamente.
import { ref } from 'vue'
const discountCodes = ref([])
const product = ref({ quantity: 1 })
function applyDiscount(event) {
// Usar discountCodes.value y product.value.
// Buscar el código recibido desde event y actualizar el producto.
}
export default { setup() { return { applyDiscount } } }
¿Qué errores comunes con refs y value?
Un error frecuente es intentar usar la referencia directamente como si fuera el valor. Recuerda: el valor real está en .value porque internamente es un proxy que View observa.
- Usa discount codes.value, no discount codes.
- Usa product.value, no product.
- En templates, Vue desempaqueta por ti: no necesitas .value en expresiones como cart.length.
¿Cómo agregar productos al carrito con add to cart?
Puedes ordenar el código de setup como prefieras. Define la función addToCart cerca de la lógica del carrito. Asegúrate de insertar en el carrito el objeto del producto, no la referencia.
- cart es una referencia a un arreglo: manipula cart.value.
- Inserta una copia del objeto: por ejemplo, con el spread de product.value.
- Envía addToCart desde setup y llámala en el botón add to cart del template.
const cart = ref([])
function addToCart() {
// Insertar el objeto del producto, no la referencia.
cart.value.push({ ...product.value })
}
export default { setup() { return { addToCart, cart, product } } }
¿Cómo manipular cart y product con value?
Cambia lecturas y escrituras a través de .value. Para agregar, usa cart.value.push(...). Para leer datos del producto, usa product.value.
- cart.value es el arreglo donde se insertan productos.
- product.value es el objeto del producto que se agrega.
- Evita mutar la referencia directamente sin .value.
¿Cómo mostrar la cantidad con cart.length y quantity?
En el template, Vue desempaqueta las referencias. Por eso, cart.length funciona sin .value. Para mostrar la cantidad del producto, usa el campo product.quantity.
- Muestra el número de elementos con cart.length.
- Muestra la cantidad con product.quantity entre paréntesis.
- Si falta quantity, defínela en el objeto del producto con valor 1.
<!-- Ejemplo de template -->
<button @click="addToCart">add to cart</button>
<span>{{ cart.length }}</span>
<span>({{ product.quantity }})</span>
<input @keyup="applyDiscount(event)" />
¿Qué ajustes finales mejoran la experiencia?
Hay detalles que evitan confusiones y errores:
- Elimina timeouts innecesarios cuando ya no aportan.
- Define product.quantity = 1 cuando no exista.
- Presiona Enter en key up para aplicar el código de descuento, por ejemplo: Plati.
¿Te gustaría ver otras formas de organizar código en Composition API o refactorizar estos métodos? Comparte tu duda o caso en los comentarios.