为什么vue-router4得组合式api必须写在setup函数顶层,useRouter为什么在其他地方为undefine

开发者在非setup区域遇到VueRouter组合式API返回undefined的问题,原因在于未在setup内使用。解决方法包括:在非SSR场景下直接导入router.js,或在全局存储如Pinia中注入router。
摘要由CSDN通过智能技术生成

今天在开发中偶然遇到了一个问题,就是在setup以外的地方使用vue-router得组合式api,发现返回的是undefined,一开始我以为是router没有引入,但是检查过后发现并没有那么简单。
首先我打印了一下useRouter发现函数内部返回了一个reject(ROUTE_KEY),然后去查阅源码发现如下图

在这里插入图片描述

我接着找到了注入该key得地方

在这里插入图片描述

此时我们发现inject是来自vue得一个组合式api。然后顺藤摸瓜找到vue文档中写了一句话。如下图

在这里插入图片描述

通过官方上图得两段话可可知,如果我们在setup以外得地方使用就会是undefined。 那么有没有解决办法呢?

遇到问题最好的办法首先肯定是看文档,文档中没有就去issus上面找,我们看到github中已经有人提了该问题
在这里插入图片描述

下面可以看到作者大大已经回答得很明确了。目前有两个办法可以解决

在这里插入图片描述
if you are not doing SSR (Server Side Rendering), you can directly import it from your router.js wherever you need
else, you will need to inject the router into the store to be able to use it everywhere. e.g. with Pinia, you attach it to all the stores:

这两句话翻译过来就是

如果你不在做服务器端渲染(SSR),你可以直接从你的 router.js 中导入它,无论在何处你需要它。
否则,你需要将路由器注入到存储中,以便在任何地方使用它。例如,使用 Pinia,你可以将它附加到所有的存储中:

至此不仅疑惑也解决了,办法也有了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值