在vue3中食用vue-router(Vue 2 迁移指南)

872 阅读1分钟

破环性变化

建议按顺序阅读!

new Router 变为 createRouter

Vue Router不再是一个类,而是一个函数。现在必须调用createRouter,而不是写成new Router()

// vue2
import Router from 'vue'
const vueRouter = new Router({})

// vue3
import { createRouter } from 'vue'
const router = createRouter({})

新的history选项替代了mode

mode:history选项被一个更为灵活的名为history选项替代。

根据您使用的模式的不同,你也需要使用合适的方法替换:

  • "history": createWebHistory()
  • "hash": createWebHashHistory()
  • "abstract": createMemoryHistory()

看一下完整代码:

import { createRouter, createWebHistory } from 'vue'

createRouter({
	history: createWebHistory(),
	routes: [],
})

当然,在SSR程序中:

// route.js
import { createRouter, createMemoryHistory, createWebHistory } from 'vue'

let history = isServer ? createMemoryHistory() : createWebHistory()

let router = createRouter({ history, routes: [] })

// 在你的server-entry.js里
// 请求url
router.push(req.url)
router.isReady().then(() => {
	// 处理请求
})

为什么这样做?

能够使用tree shaking,并且在一些高级案例中可以自定义实现。

移除了base选项

base选项作为第一个参数传递给createWebHistorycreateWebHashHistorycreateMemoryHistory)中:

import { createRouter, createWebHistory } from 'vue'

createRouter({
	history: createWebHistory('/base-directory/'),
	routes: [],
})

移除*(匹配全部路由)

匹配全部路由(*,/*)必须使用自定义正则的参数来定义:

TODO:需要理解

正在更新中...

文档翻译自next.router.vuejs.org/guide/migra…