Code前端首页关于Code前端联系我们

Vuex 3 是什么?如何使用?

terry 5小时前 阅读数 7 #Vue
文章标签 使用方法

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

Vuex 3 的核心概念

(一)State

State 是 Vuex 中存储数据的地方,它是响应式的,也就是说,当 State 中的数据发生变化时,所有依赖它的组件都会自动更新,我们可以通过 `this.$store.state` 来访问 State 中的数据。

(二)Getter

Getter 可以理解为 State 的计算属性,它的作用是对 State 中的数据进行加工处理,然后返回一个新的值,我们可以通过 `this.$store.getters` 来访问 Getter。

(三)Mutation

Mutation 是更改 Vuex 中 State 的唯一方法,它必须是一个同步函数,并且它的第一个参数是 State,我们可以通过 `this.$store.commit` 来触发 Mutation。

(四)Action

Action 类似于 Mutation,但是它可以包含异步操作,Action 提交的是 Mutation,而不是直接变更 State,我们可以通过 `this.$store.dispatch` 来触发 Action。

(五)Module

Module 是将 Vuex 的 Store 分割成模块(module),每个模块拥有自己的 State、Mutation、Action、Getter 甚至是嵌套子模块,这样可以让我们的代码更加模块化,易于维护。

Vuex 3 的安装与配置

(一)安装

我们可以使用 npm 或者 yarn 来安装 Vuex 3。

使用 npm 安装:

```bash npm install vuex@3 --save ```

使用 yarn 安装:

```bash yarn add vuex@3 ```

(二)配置

在 Vue 项目中,我们需要在 `main.js` 中引入 Vuex 并进行配置。

```javascript import Vue from 'vue' import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({ // 在这里配置 State、Getter、Mutation、Action、Module 等 })

new Vue({ store, // 其他配置 }).$mount('#app')


## 三、Vuex 3 的使用示例
### (一)定义 State
```javascript
const state = {
  count: 0
}

(二)定义 Getter

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

(三)定义 Mutation

const mutations = {
  increment: state => {
    state.count++
  },
  decrement: state => {
    state.count--
  }
}

(四)定义 Action

const actions = {
  incrementAsync({ commit }) {
    setTimeout(() => {
      commit('increment')
    }, 1000)
  },
  decrementAsync({ commit }) {
    setTimeout(() => {
      commit('decrement')
    }, 1000)
  }
}

(五)定义 Module

const moduleA = {
  state: {
    name: 'moduleA'
  },
  mutations: {
    updateName(state, newName) {
      state.name = newName
    }
  },
  actions: {
    updateNameAsync({ commit }, newName) {
      setTimeout(() => {
        commit('updateName', newName)
      }, 1000)
    }
  },
  getters: {
    getName: state => state.name
  }
}
const moduleB = {
  state: {
    age: 18
  },
  mutations: {
    updateAge(state, newAge) {
      state.age = newAge
    }
  },
  actions: {
    updateAgeAsync({ commit }, newAge) {
      setTimeout(() => {
        commit('updateAge', newAge)
      }, 1000)
    }
  },
  getters: {
    getAge: state => state.age
  }
}
const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

(六)在组件中使用

在 Vue 组件中,我们可以通过 `mapState`、`mapGetters`、`mapMutations`、`mapActions` 等辅助函数来方便地使用 Vuex 中的数据和方法。

```html ```

Vuex 3 的优点

(一)集中式管理

Vuex 将所有组件的状态集中管理,使得状态的变化更加可预测和易于维护。

(二)响应式

Vuex 中的 State 是响应式的,当 State 发生变化时,所有依赖它的组件都会自动更新。

(三)模块化

Vuex 支持模块(Module),可以将 Store 分割成多个模块,每个模块拥有自己的 State、Mutation、Action、Getter 等,使得代码更加模块化,易于维护。

(四)调试方便

Vuex 集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能,方便我们调试代码。

Vuex 3 的注意事项

(一)Mutation 必须是同步函数

因为 Vuex 的 Mutation 是用来更改 State 的,而 Vue 的响应式系统是基于同步操作的,Mutation 是异步函数,State 的变化将无法被 Vue 的响应式系统捕捉到,从而导致组件无法及时更新。

(二)Action 提交的是 Mutation,而不是直接变更 State

Action 可以包含异步操作,但是它不能直接变更 State,因为如果 Action 直接变更 State,State 的变化将无法被追踪和调试,Action 必须提交 Mutation,由 Mutation 来变更 State。

(三)Module 的命名空间

当我们使用 Module 时,需要注意命名空间的问题,如果我们不指定命名空间,Module 中的 Mutation、Action、Getter 等将与全局的 Mutation、Action、Getter 等发生冲突,我们可以通过 `namespaced: true` 来指定 Module 的命名空间,这样 Module 中的 Mutation、Action、Getter 等将不会与全局的发生冲突。

Vuex 3 是一个非常强大的状态管理工具,它可以帮助我们更好地管理 Vue 应用程序的状态,通过本文的介绍,相信你已经对 Vuex 3 有了一个基本的了解,在实际开发中,我们可以根据项目的需求,合理地使用 Vuex 3 来管理应用程序的状态,提高开发效率和代码质量。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门