vue3 在pinia里面写退出登陆,无法获取路由,如下代码?userouter()未定义为什么?

export const useMainStore = defineStore('main', {
    state: () => ({
        routers: []
    }),
    actions: {
        pushRouter(router) {
            this.routers.push(router)
        },
        logout(router) {
            //     清空角色、token、
            //     重制左侧菜单和tabview
            localStorage.removeItem('token')
            localStorage.removeItem('ui')
            localStorage.removeItem('routers')
            useRouter().push('/login')
        }
    }
})

最终我这样解决了,传入router实例

其它.vue页面
let router = useRouter()
useMainStore().logout(router)



pinia文件
export const useMainStore = defineStore('main', {
    actions: {
        logout(router) {
            localStorage.removeItem('token')
            localStorage.removeItem('ui')
            localStorage.removeItem('routers')
            router.push('/login')
        }
    }
阅读 6.5k
2 个回答

useRouter()要在vue组件里写,其他地方需要可以用路由实例来跳转,比如

import router from '@/router'
...

router.push('/xxx')
//main.js
const pinia = createPinia()
//在pinia中使用路由跳转
pinia.use(({ store }) => {
    store.router = markRaw(router)
})
app.use(pinia)

pinia中使用

actions: {
    join() {
        this.router.push(`/message/detail/${conversationType}/${targetId}`)
    }
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题