【vue高频面试题—Vuex篇】:vuex有哪几种属性 分别是干嘛的

70 阅读1分钟

在 Vuex 中,核心概念包括 StateGetterMutationActionModule。这些概念对应了 Vuex 的几种属性或功能:

  1. State(状态)

    • 作用:存储应用的全局数据,相当于组件中的 data

    • 特点:数据是响应式的,当状态改变时,依赖它的视图会自动更新。

    • 示例

      const store = new Vuex.Store({
        state: {
          count: 0
        }
      });
      
  2. Getter(派生状态)

    • 作用:对 state 进行计算或过滤,类似于组件中的 computed

    • 特点:Getter 的返回值会根据其依赖被缓存,只有当依赖发生改变时才会重新计算。

    • 示例

      const store = new Vuex.Store({
        state: {
          count: 10
        },
        getters: {
          doubleCount: state => state.count * 2
        }
      });
      
  3. Mutation(同步更改状态)

    • 作用:用于修改 state 中的数据。

    • 特点

      • 必须是同步操作,不允许异步操作。
      • 需要通过 commit 方法触发。
    • 示例

      const store = new Vuex.Store({
        state: {
          count: 0
        },
        mutations: {
          increment(state) {
            state.count++;
          }
        }
      });
      
      store.commit('increment'); // 调用 mutation 修改 state
      
  4. 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
      
  5. Module(模块化)

    • 作用:将 store 按照模块进行划分,使代码更加清晰和可维护。

    • 特点:每个模块都有自己的 stategettermutationaction

    • 示例

      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。