useRouter 报错 TypeError: Cannot read properties of undefined (reading 'push')

923 阅读1分钟

当使用 useRouter 函数时:

  • 一定要在 setup 函数顶部或其他位置执行

  • 不能在 setup 函数内的其他函数中执行,否则会出现作用域改变,useRouter 函数返回 undefined 的问题。

此外,还需要注意以下几点:

  • ** useRoute 和 useRouter 必须写在 setup 函数中**,否则会无法获取路由数据和路由方法。
  • 如果想在自定义hooks中使用路由,可以直接从路由引入路由对象。
  • 如果使用import { useRouter } from "vue-router"方式引入useRoute和useRouter,则必须在setup中调用,否则会返回undefined。可以直接引入router实例来解决。

如果出现 TypeError: Cannot read properties of undefined (reading 'push') 错误,可能是useRouter函数没有在正确的位置执行,需要将其放在setup函数顶部或其他位置执行,而不能在setup函数内的其他函数中执行。

以下是一些解决错误的示例代码:

// 正确使用useRouter函数
import { useRouter } from 'vue-router';

export default {
  setup () {
    const router = useRouter();
    // ...
  }
}

// 直接引入router实例
import router from '../router/index';

// 重写push方法
router.push({
  path: '/login',
  query: { redirect: router.currentRoute.value.fullPath }
});

// useRouter函数放在正确的位置
const router = useRouter(); // <-- router declared outside function: CORRECT
const enterChat = () => {
  router.push({ name: "Chatroom" });
};