es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error no capturado (en la promesa) TypeError: la tienda no está definida en Quasar v2 con Vue-Routisan y Vuex.

Actualmente estoy configurando un proyecto usando quasar v2, vue-routisan y vuex 4. He intentado importar useStore e importar desde la tienda predeterminada, pero parece que no funciona. Llevo todo un día tratando de resolver el problema.

Archivo routes.js

import Route from "vue-routisan";
import {guest} from "./middleware/index";
Route.setViewResolver(component => require("src/pages/" + component).default);
Route.view("/admin", "layouts/Auth")
    .guard(guest)
    .children(() => {
    });
export default Route.all();

Archivo guest.js

import { useStore } from 'vuex';
const store = useStore();

export default async function (to, from, next) {
  store.dispatch("auth/fetch")
  .then(r => {
    if (r.status === 200) {
      next("/dashboard");
    } else {
      next();
    }
  })
  .catch(() => {
    next();
  });
}

Archivo store/index.js

import { store } from 'quasar/wrappers';
import { createStore } from 'vuex';

import currentUser from './auth';

export default store(function () {
  const Store = createStore({
    modules: {
      currentUser
    },
  });

  return Store
});

Error: Uncaught (in promise) TypeError: store is undefined (at guest.js 7).
Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la importación de useStore() en guest.js. useStore() solo puede ser utilizado dentro de componentes que estén montados dentro del contexto de una tienda, por lo que no puede ser utilizado en middleware u otros archivos que no sean componentes. En su lugar, puedes intentar importar la tienda directamente desde el archivo store/index.js:

    import store from "../store";
    
    // ...
    
    const { dispatch } = store;
    
    export default async function (to, from, next) {
      dispatch("auth/fetch")
        .then((r) => {
          if (r.status === 200) {
            next("/dashboard");
          } else {
            next();
          }
        })
        .catch(() => {
          next();
        });
    }
    

    Además, asegúrate de haber importado la tienda correcta en guest.js. Es posible que debas ajustar la ruta relativa dependiendo de dónde se encuentre el archivo.

Comments are closed.