老师,关于useRouter或useRoute在setup中使用位置问题

来源:10-5 搜索布局及路由跳转(2)

慕容6332229

2021-04-28

老师,在setup函数中使用const router = useRouter(),然后用router做跳转,
发现如果写在setup中定义的function中,却报错,提示router无效,router的back函数 undefine。见如下代码:

// 下面代码段中,router的定义,分别写在两处。第一处可以,第二处不行。这里只是做示例,运行代码时,只保留一处定义。
export default {
  name: 'Shop',
  setup () {
    const router = useRouter() //router写在此处OK。但写入其下的箭头函数内就不行
    const handleBackClick = () => {
      const router = useRouter() //router写在此处,就不行。运行会报错
      router.back()
    }
    return { handleBackClick }
  }
}

开始以为是不能写在箭头函数中,但实际上,如果把handleBackClick() 方法写在export default 外面,即写在最外面的全局,再在setup中引入,是可以的,这也是在箭头函数中呀,是可以的呀。所以不是这个原因。所以想请问老师,是如何理解这个问题。以下也在箭头函数中,却可以。
以下可以:

// 点击回退逻辑
const useBackRouterEffect = () => {
  const router = useRouter()  // 此处也写在箭头函数中,再在下方setup中使用,却可以。
  const handleBackClick = () => {
    router.back()
  }
  return handleBackClick
}

export default {
  name: 'Shop',
  setup () {
    const handleBackClick = useBackRouterEffect() //可以
    return { handleBackClick }
  }
}

所以,请老师解答我的疑问,一直不明白为何放在setup中再写的函数中就不行?但是如果写在外面引入,却又可以。因为实际写代码时,在setup中经常写funtion箭头函数,就经常这么写,浏览器上执行就会报错,但始终不明白也不理解为何这样写,就router定义无效!求解!
报错截图如下:
图片描述

写回答

1回答

Dell

2021-05-01

报错的内容截图给我看一下

0
3
慕容6332229
谢谢老师,这个问题你在另外一处已答复:useRoute, useRouter必须写到setup中,详见vue-next-router官方文档。
2021-05-10
共3条回复

Vue3入门与项目实战 掌握完整知识体系

明星讲师DELL亲授,全方位知识点+高匹配度项目,入门到深度掌握

3382 学习 · 1454 问题

查看课程