在 Vuex 中,核心概念包括 State、Getter、Mutation、Action 和 Module。这些概念对应了 Vuex 的几种属性或功能:
-
State(状态)
-
作用:存储应用的全局数据,相当于组件中的
data
。 -
特点:数据是响应式的,当状态改变时,依赖它的视图会自动更新。
-
示例:
const store = new Vuex.Store({ state: { count: 0 } });
-
-
Getter(派生状态)
-
作用:对
state
进行计算或过滤,类似于组件中的computed
。 -
特点:Getter 的返回值会根据其依赖被缓存,只有当依赖发生改变时才会重新计算。
-
示例:
const store = new Vuex.Store({ state: { count: 10 }, getters: { doubleCount: state => state.count * 2 } });
-
-
Mutation(同步更改状态)
-
作用:用于修改
state
中的数据。 -
特点:
- 必须是同步操作,不允许异步操作。
- 需要通过
commit
方法触发。
-
示例:
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++; } } }); store.commit('increment'); // 调用 mutation 修改 state
-
-
Action(异步操作)
-
作用:用于处理异步任务,比如发送请求,完成后再提交
mutation
来修改状态。 -
特点:
- 可以包含异步操作。
- 通过
dispatch
方法触发。
-
示例:
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++; } }, actions: { asyncIncrement(context) { setTimeout(() => { context.commit('increment'); }, 1000); } } }); store.dispatch('asyncIncrement'); // 异步调用 action
-
-
Module(模块化)
-
作用:将
store
按照模块进行划分,使代码更加清晰和可维护。 -
特点:每个模块都有自己的
state
、getter
、mutation
和action
。 -
示例:
const moduleA = { state: { count: 0 }, mutations: { increment(state) { state.count++; } }, actions: { incrementAction(context) { context.commit('increment'); } }, getters: { doubleCount: state => state.count * 2 } }; const store = new Vuex.Store({ modules: { a: moduleA } }); store.dispatch('incrementAction'); // 调用 moduleA 的 action
-
总结:
Vuex 中的几种核心属性和功能为:
- State:全局状态数据。
- Getter:基于 state 派生的状态数据。
- Mutation:同步修改 state。
- Action:异步操作,提交 mutation。
- Module:模块化管理 state、mutation、action 和 getter。