当前位置: 技术文章>> Vuex 的 mutations、actions 和 getters 有何区别?

文章标题:Vuex 的 mutations、actions 和 getters 有何区别?
  • 文章分类: 后端
  • 9085 阅读
文章标签: vue vue基础
Vuex 是 Vue.js 应用程序的状态管理模式和库。在 Vuex 中,`mutations`、`actions` 和 `getters` 是核心概念,它们各自扮演着不同的角色,并在状态管理中发挥着关键作用。以下是它们之间的主要区别: ### 1. Mutations * **定义**:Mutations 是 Vuex 中同步更改状态的唯一方法。每个 mutation 都有一个字符串的事件类型(type)和一个回调函数(handler),该回调函数就是实际进行状态更新的地方。 * **特性**: * **同步性**:Mutations 必须是同步的,这意味着它们会立即执行并修改状态。 * **原子性**:每个 Mutation 应该是原子的,即它应该只修改一个状态值,或者相关的一组状态值。 * **确定性**:Mutations 的执行结果应该是确定的,相同的输入应该产生相同的输出。 * **触发方式**:在组件中,可以使用 `store.commit` 方法来触发特定的 Mutation。 ### 2. Actions * **定义**:Actions 类似于 mutations,不同之处在于 Actions 提交的是 mutations,而不是直接变更状态;Actions 可以包含任意异步操作。 * **特性**: * **异步性**:Actions 是处理异步操作和触发状态变更的地方,如网络请求、定时器等。 * **业务逻辑**:Actions 可以包含业务逻辑,并在触发 mutation 之前进行数据的预处理或后处理。 * **组合性**:Actions 可以组合多个 mutations,以实现更复杂的状态更改逻辑。 * **触发方式**:在组件中,可以通过 `store.dispatch` 方法来触发 actions。 ### 3. Getters * **定义**:Getters 类似于 Vue 组件中的计算属性,用于对 store 中的 state 进行计算或过滤,并返回一个新的值供组件使用。 * **特性**: * **缓存性**:Getters 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。 * **组合性**:Getters 可以接收其他 getters 作为参数,实现对多个状态的联合计算。 * **易用性**:在组件中,可以通过 `this.$store.getters.getterName` 来访问 getters。 ### 总结 | | Mutations | Actions | Getters | | --- | --- | --- | --- | | **定义** | 同步更改状态的唯一方法 | 提交 mutations,可包含异步操作 | 类似于计算属性,对 state 进行计算或过滤 | | **特性** | 同步性、原子性、确定性 | 异步性、业务逻辑、组合性 | 缓存性、组合性、易用性 | | **触发方式** | `store.commit('mutationName', payload)` | `store.dispatch('actionName', payload)` | 在组件中通过 `this.$store.getters.getterName` 访问 | 这些概念共同构成了 Vuex 的状态管理体系,使得 Vue.js 应用程序的状态管理变得更加集中、高效和可维护。
推荐文章