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

文章标题:Vuex 的 mutations、actions 和 getters 有何区别?
  • 文章分类: 后端
  • 9218 阅读
文章标签: vue vue基础

Vuex 是 Vue.js 应用程序的状态管理模式和库。在 Vuex 中,mutationsactionsgetters 是核心概念,它们各自扮演着不同的角色,并在状态管理中发挥着关键作用。以下是它们之间的主要区别:

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 应用程序的状态管理变得更加集中、高效和可维护。

推荐文章