基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Vuex 有哪几个核心属性?(State, Getter, Mutation, Action, Module)

知识点图片

Vuex 的核心属性确实就是你列出的这 5 个:State、Getter、Mutation、Action、Module

下面我为你详细解析每一个属性的作用、特点以及它们之间的关系:

1. State(单一状态树)

  • 定义:Vuex 使用“单一状态树”,即用一个对象就包含了全部的应用层级状态。
  • 类比:相当于 Vue 组件中的 data
  • 作用:存储应用中需要共享的数据。
  • 特点
    • 数据是响应式的。
    • 在组件中通常通过 this.$store.state.xxx 访问,或者使用 mapState 辅助函数映射到计算属性中。

2. Getter(派生状态)

  • 定义:从 State 中派生出一些状态(例如:对列表进行过滤、计数)。
  • 类比:相当于 Vue 组件中的 computed(计算属性)。
  • 作用:对 State 进行加工处理后返回,避免在多个组件中复制粘贴相同的逻辑。
  • 特点
    • 缓存性:Getter 的返回值会根据它的依赖被缓存起来,只有当依赖值发生了改变才会被重新计算。
    • 通过 this.$store.getters.xxx 访问。

3. Mutation(状态变更)

  • 定义:更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
  • 类比:类似于组件中的 methods(但仅限于同步操作),或者更像是一种“事件”。
  • 作用:直接修改 State 数据。
  • 特点
    • 必须是同步函数。这是为了确保状态变更可追踪(DevTools 需要捕捉快照)。
    • 调用方式:this.$store.commit('mutationName', payload)

4. Action(动作)

  • 定义:Action 类似于 Mutation,但它用于处理异步操作和业务逻辑。
  • 类比:相当于组件中的 methods(可以包含异步操作)。
  • 作用
    1. 提交 Mutation(它不直接变更状态)。
    2. 包含任意异步操作(如 API 请求、定时器)。
  • 特点
    • 可以是异步的
    • 调用方式:this.$store.dispatch('actionName', payload)

5. Module(模块)

  • 定义:由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。Vuex 允许我们将 store 分割成模块(module)
  • 作用:代码组织和拆分。
  • 特点
    • 每个模块拥有自己的 state、mutation、action、getter,甚至是嵌套子模块。
    • 通常配合 namespaced: true(命名空间)使用,以避免命名冲突并提高封装性。

总结与数据流向图

Vuex 的数据流向是单向的,流程如下:

  1. Component (组件):触发(Dispatch)一个 Action
  2. Action:执行异步操作(如请求后端 API),拿到数据后,提交(Commit)一个 Mutation
  3. Mutation:同步修改 State
  4. State:数据发生变化,响应式地更新 Component 的视图(或者通过 Getter 计算后更新)。

简单对比表:

属性 对应 Vue 概念 核心职责 同步/异步 调用方式
State data 存储数据 - state.xxx
Getter computed 计算/过滤数据 - getters.xxx
Mutation methods 修改数据 必须同步 commit()
Action methods 业务逻辑/API 可以异步 dispatch()
Module - 代码分割 - -
00:00
00:00