VueJS 3: Estado global con API de composici贸n





La nueva API de composici贸n le permite deshacerse de la tienda Vuex. Veamos un ejemplo simple de c贸mo lograrlo. Y considere los pros y los contras.



Ejemplo



Tomemos un ejemplo de un contador en Vuex de la documentaci贸n de la tienda m谩s simple e implem茅ntelo usando la API de composici贸n.



M贸dulo contador m贸dulos / contador.ts:



import { ref } from 'vue'

const counter = ref(0)

export default function useCounter () {
  const increment = () => {
    counter.value++
  }
  return { counter, increment }
}


Tenga en cuenta que la variable de contador est谩 fuera de la funci贸n useCounter (). Por lo tanto, cuando se llama a la funci贸n useCounter en diferentes componentes, counter se referir谩 a la misma instancia. Y esto es lo que necesitamos.



Usar nuestro contador en diferentes componentes es simple:



<template>
    <div>
      {{ counter }}
    </div>
   <button @click="increment">+</button>
</template>

<script lang="ts">
import { defineComponent } from 'vue'
import useCounter from '@/modules/useCounter'

export default defineComponent({
  name: 'App',
  setup () {
    const { counter, increment } = useCounter()
    return { counter, increment }
  }
})
</script>


Para usar el contador global, solo necesita importar useCounter en los m贸dulos necesarios y usarlo.



Si necesita restringir el acceso a la variable de contador, no puede exportarla, sino la funci贸n getter:



import { ref, computed } from 'vue'

const counter = ref(0)
const getCounter = computed(() => counter.value)
const increment = () => counter.value++

export default function useCounter () {
  return { getCounter, increment }
}


Pros y contras



Una de las mejores cosas de Vuex es trabajar con devtools de Vue.js. Es muy conveniente ver el estado global completo en forma de 谩rbol, ver las llamadas a mutaciones con las variables pasadas y tambi茅n poder retroceder a diferentes estados. A煤n no est谩 claro c贸mo se admitir谩 la API de composici贸n en Vue.js devtools, el trabajo a煤n est谩 en progreso.



La estructura de Vuex (captadores, mutaciones, acciones) puede parecer sint谩cticamente redundante, pero permite una presentaci贸n clara y una separaci贸n del trabajo del m贸dulo de repositorio y es m谩s una ventaja que una desventaja. Y cuando usa la API de composici贸n, el desarrollador decide todo 茅l mismo, puede hacer un caramelo, o tal vez no.



La compatibilidad con TypeScript es un punto d茅bil en Vuex. Todos los art铆culos que intentan escribir Vuex dan miedo. Y as铆 es como Vuex detallado se vuelve muy detallado. Si usamos la API de composici贸n, es m谩s simple, use TypeScript como de costumbre.



Vuex se conecta como un complemento y est谩 disponible en todos los componentes a trav茅s de este. $ Store. En el caso de la API de composici贸n, necesitamos importar el m贸dulo. No hay mucha diferencia y ambos enfoques le permiten trabajar con el estado global.



El uso de la API de composici贸n, por otro lado, nos libera de dependencias innecesarias y nos permite organizar el estado global como sea conveniente. Por otro lado, la cuesti贸n de las pruebas permanece. Los m贸dulos globales en s铆 mismos son f谩ciles de probar, pero los m贸dulos que los utilizan ya son m谩s dif铆ciles de probar.



Conclusi贸n



A煤n no est谩 claro si vale la pena abandonar Vuex, pero definitivamente hay una nueva herramienta que te permite resolver los problemas resueltos por Vuex. En un futuro pr贸ximo, quedar谩 claro qu茅 enfoque es mejor y en qu茅 caso. Mientras tanto, los desarrolladores de Vuex no han anunciado sobre el plegado del proyecto y lo vieron como antes, y en la documentaci贸n de Vue3 todav铆a hay un enlace a Vuex.



All Articles