Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

117
Vistas
Cómo establecer el estado de los datos api en la tienda

Estoy tratando de establecer mi estado en los datos que obtengo de mi API con un GETTER en la tienda.

durante el gancho del ciclo de vida mounted() , active el GETTER getProducts() que se ve así:

 export const getters = { async getProducts() { axios.get('/api/products') .then(res => { var data = res.data commit('setProducts', data) }) .catch(err => console.log(err)); } }

En el GETTER trato de activar una MUTACIÓN llamada setProducts setProducts() que se ve así:

 export const mutations = { setProducts(state, data) { state.products = data } }

Pero cuando ejecuto esto, aparece el error ReferenceError: la confirmación no está definida en mi consola. Entonces, obviamente, lo que sale mal es desencadenar la MUTACIÓN, pero después de buscar 2 días seguidos en Internet, todavía no pude encontrar nada.

También intenté reemplazar commit('setProducts', data) con: this.setProducts(data) setProducts(data)

Todo lo cual terminó con el error "Error de tipo: no se pueden leer las propiedades de undefined (leyendo 'setProducts')"

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si su función getProduct está definida en un componente Vue, debe acceder a la tienda de esta manera: this.$store.commit('setProducts', data)

Si su función no está definida en un componente Vue sino en un archivo javascript externo, primero debe importar su tienda

 import store from './fileWhereIsYourStore.js' store.commit('setProducts', data)

Si la exportación de getters es literalmente la definición de los captadores de su tienda, puede usar la solución de importar la tienda primero, pero debe saber que claramente no es una buena práctica hacer confirmaciones en captadores. Debe haber una mejor solución a su problema.

EDITAR: para responder a su comentario, así es como podría hacerlo:

 // Your store module export default { state: { products: [] }, mutations: { SET_PRODUCTS(state, data) { state.products = data } }, actions: { async fetchProducts(store) { await axios.get('/api/products') .then(res => { var data = res.data store.commit('SET_PRODUCTS', data) }) .catch(err => console.log(err)); } } }

Ahora, puede obtener productos y llenar su tienda en cada uno de sus componentes de esta manera:

 // A random Vue Component <template> </template> <script> export default { async mounted() { await this.$store.dispatch('fetchProducts') // now you can access your products like this console.log(this.$store.state.products) } } </script>

No probé este código, pero debería estar bien.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Solo las acciones tienen commit en su contexto, como puede ver aquí .
Los captadores no tienen commit .

De lo contrario, también podría usar mapActions (también conocido como import { mapActions } from 'vuex' ), en lugar de this.$store.dispatch (solo una cuestión de estilo, no hay una diferencia real al final).

Refactorizar su código para que tenga una acción como sugirió Julien es una buena solución porque así es como debería usar Vuex.

Los captadores generalmente se usan para tener algún estado que tenga una estructura específica, como ordenados alfabéticamente o similares. Para acceder al estado común, use el estado regular o el ayudante de mapState .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda