Vue2 学习笔记系列:从 Vue Router 路由到 Vuex 状态管理
Vue2 项目里绕不开的两块:**路由(Vue Router)**管页面跳转,**状态管理(Vuex)**管跨组件数据共享。本文把最常用、最容易混的知识点串一遍,配可复制的代码。
一、Vue Router 路由
1.1 基本配置
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '@/views/Home.vue'
import About from '@/views/About.vue'
Vue.use(VueRouter)
const routes = [
{ path: '/', name: 'Home', component: Home },
{ path: '/about', name: 'About', component: About }
]
const router = new VueRouter({
mode: 'history', // 去掉 URL 里的 #
routes
})
export default router
1.2 嵌套路由
const routes = [
{
path: '/user',
component: UserLayout,
children: [
{ path: '', component: UserProfile }, // /user
{ path: 'posts', component: UserPosts } // /user/posts
]
}
]
1.3 路由守卫(权限控制核心)
router.beforeEach((to, from, next) => {
const loggedIn = store.getters.isLoggedIn
if (to.meta.requiresAuth && !loggedIn) {
next('/login') // 未登录跳登录页
} else {
next() // 放行
}
})
二、Vuex 状态管理
当多个组件需要共享同一份数据(如用户信息、购物车),props/emit 层层传递会很痛苦,这时上 Vuex。
2.1 四大核心概念
| 概念 | 作用 | 是否可直接改 |
|---|---|---|
| state | 唯一数据源(类似 data) | 否 |
| getters | 派生状态(类似 computed) | 否 |
| mutations | 同步修改 state 的唯一途径 | 是(必须) |
| actions | 处理异步,再提交 mutation | 是 |
2.2 一个完整 store
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
count: 0,
user: null
},
getters: {
doubleCount: state => state.count * 2,
isLoggedIn: state => !!state.user
},
mutations: {
INCREMENT(state, n = 1) {
state.count += n
},
SET_USER(state, user) {
state.user = user
}
},
actions: {
// 异步场景(如接口请求)放在 action
async login({ commit }, payload) {
const user = await api.login(payload)
commit('SET_USER', user)
}
}
})
2.3 组件里怎么用
// 读状态
this.$store.state.count
this.$store.getters.doubleCount
// 派发 action(异步)
this.$store.dispatch('login', { username, password })
// 提交 mutation(同步)
this.$store.commit('INCREMENT', 2)
配合 mapState / mapGetters / mapActions 语法糖,组件代码更简洁:
import { mapState, mapActions } from 'vuex'
export default {
computed: { ...mapState(['count']), ...mapGetters(['doubleCount']) },
methods: { ...mapActions(['login']) }
}
三、路由 + Vuex 配合的典型场景
登录流程就是两者协作的经典案例:
- 路由守卫拦截需鉴权页面 → 未登录跳
/login; - 登录页提交 →
dispatch('login')调接口; action拿到用户信息 →commit('SET_USER')写入 state;- 守卫再次判断
getters.isLoggedIn为 true → 放行。
四、小结
- Vue Router 负责「去哪」,核心是路由表配置、嵌套路由和
beforeEach守卫; - Vuex 负责「共享什么」,严格遵循
action(异步) → mutation(同步改) → state的单向数据流; - 两者结合,就能撑起一个带权限、带全局状态的真实前端应用。
参考资料
- Vue2 官方文档(Vue Router / Vuex)
- 个人学习笔记整理

3646

被折叠的 条评论
为什么被折叠?



