javascript - 视觉 : How to use Per-Route Guard with Vuex getter?

标签 javascript vue.js vue-component vuex vue-router

类似于我们使用 isAuthenticate 函数来检查用户是否已正确验证的方式,我正在尝试在我的商店中进行检查。

const state = {
    cliente: []
};

const getters = {
    //Verificar Regra
    CHECK_CLIENTE_STATE: (state) => {
        return state.cliente
    }
}

const actions = {
    FETCH_DADOS({ commit }, obj) {
        return fetch(`http://localhost:3030/pessoas/informacao/${obj['data']}`)
            .then(response => response.json())
            .then(data => commit('SetCliente', data))
            .catch(error => console.log(`Fetch: ${error}`))
    }
}

const mutations = {
    SetCliente(state, cliente) {
        state.cliente = cliente
    }
}

登录页面,

  methods:{
    fetch(){
      this.$store.dispatch("FETCH_DADOS",{'data':'12345'})
      this.$router.push('/') 
    }
  }

在第一次获取点击时,我检查了 Vuex,显然它正在工作。

enter image description here

路线:

const routes = [{
        path: '/',
        beforeEnter: (to, from, next) => {
            if (store.getters.CHECK_CLIENTE_STATE == '') {
                next('/login')
            }
            next();
        },
        component: () =>
            import ('../views/Home')
    },
    {
        path: '/login',
        component: () =>
            import ('../views/Login')
    }
]

好吧,在 console.log 中,在第一次获取点击时,我收到了这个错误,但是在 vuex 中,如上所示,商店已满。

Uncaught (in promise) Error: Redirected when going from "/login" to "/" via a navigation guard.

为什么在第二次点击时重定向到 home,而不是在第一次点击时?

更新中

在 router.js 中尝试一种新方法

path: '/',
beforeEnter: (to, from, next) => {
    console.log(!store.getters.CHECK_CLIENTE_STATE.length)
    if (!store.getters.CHECK_CLIENTE_STATE.length) {
        next('/login')
    }
    next();
},
component: () =>
    import ('../views/Home')

但同样,第一次获取是 TRUE,第二次是 FALSE,在第二次我被重定向到/home

最佳答案

路由器在加载数据之前被引导。等待它:

methods:{
  async fetch(){
    await this.$store.dispatch("FETCH_DADOS",{'data':'12345'})
    this.$router.push('/') 
  }
}

关于javascript - 视觉 : How to use Per-Route Guard with Vuex getter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65298252/

相关文章:

javascript - 如何通过重构从 Context.Consumer 访问值?

javascript - 从选择和克隆表单中获取值(value)的次数

javascript - Vue.js - 观察数据变化

javascript - 我想在按钮上添加一个事件处理程序,该事件处理程序将使用 Vue.js 2.0 显示组件

javascript - 基本 Javascript 前端代码的问题

javascript - 如何将使用 ImageService 提供的图像作为背景的 Canvas 元素转换为可下载图像?

javascript - 使用 Vue JS 的可重用文件组件

javascript - Vuejs 在复选框选择时切换 div 可见性

vue.js - vue js 的响应式图像网格库

javascript - vue 路由器/:param with slashes