Introducción a
Composition API

¿Qué es?

  • Nueva forma de componer componentes en Vue, centrándose en agrupar y reutilizar lógica relacionada.
     
  • Sintaxis aditiva, pudiendo usarse Options API y Composition API a la vez, incluso en un mismo componente.
     
  • Enfocada a componentes medianos y grandes. También si buscar sacar el mayor partido a TypeScript.

Show me the code 🔥

Setup function

  • Donde escribimos la lógica del componente a través de la API de Composición.
     
  • No tiene acceso a this pero lo obtiene del objeto context (como en Nuxt).
     
  • El primer argumento de setup es props, que es reactivo y puede ser observado, el segundo es context, contiene todo lo que antes se podía acceder desde this.

Active refs.

  • Para crear una referencia reactiva (lo que en la Options API hacemos con data) debemos importar la función ref.
     
  • Esta envuelve un valor en un Proxy y nos permite llevar un control de sus cambios.
     
  • Para acceder y/o mutar el valor de una referencia reactiva, debemos usar la propiedad .value para no perder la reactividad.

Lifecycle hooks

  • Nuevas denominaciones de eventos.
     
  • Prefijados por "on" (ej: onMounted).
     
  • Los hooks beforeCreate y created ya no son necesarios.
     
  • Se deben importar dentro de la función setup.

Methods

  • Podemos declarar funciones dentro del método setup y luego exponerlas junto con el resto de propiedades.
     
  • Dentro de estas funciones/métodos nos podemos referir al valor de las referencias reactivas a través de value.
     
  • Sin embargo, no hace falta especificar la propiedad value dentro de la plantilla. 

Composition API & Vuex

  • No tenemos acceso a los helpers (mapState, mapMutations, etc).
     
  • Pero sí tenemos la función useStore que podemos importar desde setup.
     
  • Con useStore podemos crear "a mano" getters a través de propieades computadas.
     
  • También podemos acceder a las mutaciones y acciones con commit y dispatch respectivamente.

Computed props.

  • Debemos incorporar la función computed y envolver con ella otra función con ella que haga uso de referencias reactivas (ref).
     
  • Por supuesto, también debemos exponer la propiedad computada desde el método setup.

Logic extraction

  • La Composition API facilita la extracción y reutilización  de lógica entre componentes.
     
  • Como podemos acceder a la reactividad fuera de un componente, crear funciones externas es algo muy común.
     
  • Incluso hay librerías especiales de composables listas para utilizar.

Reactive syntax

  • Podemos crear objetos con valores reactivos usando la función reactive.
     
  • Dentro de un objeto reactivo no tenemos que utilizar la propiedad value para modificar su valor.
     
  • Con la función toRefs convertimos un objeto reactivo en un objeto plano, donde cada propiedad es una referencia reactiva.

Watchers

  • Aparte del clásico watch, Vue 3 incorpora watchEffect, que y controla todas las dependencias reactivas.
     
  • A diferencia de watch (lazy loaded), watchEffect se ejecuta en el siguiente ciclo disponible.
     
  • Aun así podemos lanzar watch inmediatamente con la opción { immediate: true }.

Composition API & Vue Router

  • Al no tener acceso a this dentro de setup, debemos importar los helpers desde vue-router.
     
  • Si importamos useRouter podremos acceder a todas las propiedades de Vue Router, navegar de forma programática, etc.
     
  • Con useRoute podemos consultar y manipular toda la información de la ruta actual.

Moraleja...

  • Si quieres usar Vue 3, aprender a usar la Composition API NO es una opción. Hazlo cuanto antes 😉
     
  • Es especialmente útil en componentes medianos o grandes, que además contengan lógica de diferentes funciones.
     
  • El patrón de crear funciones compositoras es extremadamente potente y un game changer respecto a Vue 2.

Gracias

Taller Vue 3 de Options API a Composition API

By Juan Andrés Núñez

Taller Vue 3 de Options API a Composition API

Código del Taller de Garaje de Ideas donde refactorizamos una App de Vue 2x a Vue 3 utilizando las novedades de la API de composición - https://www.youtube.com/watch?v=aIbd_3mQEtA

  • 800