破环性变化
建议按顺序阅读!
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
选项作为第一个参数传递给createWebHistory
(createWebHashHistory
或createMemoryHistory
)中:
import { createRouter, createWebHistory } from 'vue'
createRouter({
history: createWebHistory('/base-directory/'),
routes: [],
})
移除*
(匹配全部路由)
匹配全部路由(*
,/*
)必须使用自定义正则的参数来定义:
TODO:需要理解