Vuex:Vue 应用的状态管理

66 阅读1分钟

1. 什么是 Vuex?

Vuex 是 Vue.js 官方提供的一个状态管理模式,专门用于管理 Vue 应用的全局状态。它提供了集中式存储,并通过特定的规则来确保状态的可预测性。

在大型 Vue 应用中,组件之间的通信可能会变得复杂,而 Vuex 通过提供一个全局的 Store,使得状态的管理变得更加直观和可维护。

2. Vuex 的核心概念

Vuex 主要由以下几个核心模块组成:

(1) State(状态)

State 是 Vuex 的核心部分,它存储了应用的所有全局状态。

const state = {
  count: 0
};

(2) Getters(获取器)

Getters 用于从 Store 中派生出一些状态,类似于 Vue 组件中的计算属性。

const getters = {
  doubleCount: state => state.count * 2
};

(3) Mutations(变更)

Mutations 是唯一允许修改 State 的方法,它必须是同步函数。

const mutations = {
  increment(state) {
    state.count++;
  }
};

(4) Actions(动作)

Actions 与 Mutations 类似,但它们可以包含异步操作。

const actions = {
  asyncIncrement({ commit }) {
    setTimeout(() => {
      commit('increment');
    }, 1000);
  }
};

(5) Modules(模块)

当应用变得复杂时,可以将 Vuex Store 拆分为多个模块。

const moduleA = {
  state: { name: 'ModuleA' },
  mutations: {},
  actions: {},
  getters: {}
};

const store = new Vuex.Store({
  modules: {
    a: moduleA
  }
});

3. Vuex 的使用示例

(1) 安装 Vuex

npm install vuex --save

(2) 在 Vue 项目中使用 Vuex

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  },
  actions: {
    asyncIncrement({ commit }) {
      setTimeout(() => {
        commit('increment');
      }, 1000);
    }
  }
});

new Vue({
  store,
  render: h => h(App)
}).$mount('#app');

(3) 在组件中使用 Vuex

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex';

export default {
  computed: {
    ...mapState(['count'])
  },
  methods: {
    ...mapMutations(['increment'])
  }
};
</script>

4. Vuex 与 Pinia 的对比

Vuex 在 Vue 2 和 Vue 3 中都可以使用,但 Vue 3 推荐使用更轻量级的 Pinia 作为状态管理工具。相比 Vuex,Pinia 具有更简单的 API 和更好的 TypeScript 支持。