一、核心角色对应
Vuex 模块 | 现实角色 | 职责 |
---|---|---|
Vue Components | 同学(用数据的人) | 触发操作(借书、还书),渲染页面 |
Actions | 班长(处理复杂 / 异步) | 接收同学请求,处理异步(如登记、联系老师) |
Mutations | 图书管理员(改数据) | 直接修改图书角的书(状态) |
State | 图书角(共享数据) | 存所有共享的书(状态) |
Devtools | 班主任(记录日志) | 记录谁、何时改了书(调试用) |
Backend API | 校外书店(远程数据) | 从校外拿书(异步接口请求) |
二、流程拆解(借书的完整过程)
1. 同学(Vue Components)想借书 → Dispatch
通知班长(Actions)
- 场景:同学说 “我要借《Vue 入门》!”(组件触发
this.$store.dispatch('borrowBook')
)。 - 对应流程:
// 组件里触发 this.$store.dispatch('borrowBook', { book: 'Vue 入门' })
2. 班长(Actions)处理请求 → 可能联系校外书店(Backend API)
- 场景:班长需要先确认书店有这本书(调用异步接口),再通知图书管理员。
- 对应代码:
// Vuex 的 Actions 里 actions: { async borrowBook({ commit }, payload) { // 1. 联系校外书店(Backend API) const book = await fetchBookFromBackend(payload.book) // 2. 通知图书管理员(Mutations) commit('ADD_BOOK_TO_STATE', book) } }
3. 图书管理员(Mutations)修改图书角(State)
- 场景:图书管理员收到班长通知,把《Vue 入门》放到图书角(修改共享状态)。
- 对应代码:
// Vuex 的 Mutations 里 mutations: { ADD_BOOK_TO_STATE(state, book) { // 直接修改共享状态(State) state.books.push(book) } }
4. 图书角(State)更新 → 同学(Vue Components)看到变化
- 场景:图书角的书变多了,同学再去看时,发现《Vue 入门》已上架(组件自动更新)。
- 对应原理:
Vuex 的State
是响应式的,状态变了,用到State
的组件会自动重新渲染。
5. 班主任(Devtools)记录全过程
- 场景:班主任全程记录:“同学 A 借了《Vue 入门》→ 班长联系书店→ 图书管理员更新图书角”。
- 对应工具:
Vue Devtools 里能看到每一步操作(哪个 Action、Mutation 被调用,状态怎么变的),方便调试。
三、一句话总结(必背!)
Vuex 的运行流程是 “组件 → Actions(处理异步)→ Mutations(改状态)→ State(更新)→ 组件(重新渲染)”,每个环节各司其职:
- Actions 管 “复杂 / 异步逻辑”,
- Mutations 管 “直接改状态”,
- State 存 “共享数据”,
- Devtools 管 “记录日志”。
整个流程就像 “同学→班长→图书管理员→图书角→同学” 借书的过程