1.vuex概念
专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件。

对 vue 应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信

2.vuex工作原理图

axios模块化 vue vuex模块化开发_Vue

 

整个虚线部分就是Vuex,我们可以把它看成一个公共仓库store。store中有Actions(行为)、Mutations(变动)和State(状态)。整个的逻辑是组件通过Dispatch

调用Actions中的方法,Actions通过Commit调用Mutations中的方法,Mutatisons改变State中的值。

3.vuex构造

actions

由子组件this.$store.dispatch('actions名',传递的数据)触发,传递的数据只能是单个数据,多个数据用对象传递

actions: { action名({commit},数据){...}}

store中actions内,commit用于触发mutations,actions只做业务逻辑,不修改state

mutations

由actions中的commit('mutations名',传递的数据)触发,只有mutations可以修改state中的数据

mutations:{mutations名(state,数据){...}}

state

存储数据:state:{userInfor:{}}

可以通过mutations存储或者修改,也是getters里面计算属性的依据

getters

计算state中的数据:getters:{getters名(state){...}}

 

4.vuex的常规用法(不使用模块(module)的store)

(1)创建store

axios模块化 vue vuex模块化开发_Vue_02

 

 

axios模块化 vue vuex模块化开发_axios模块化 vue_03

 

 

 

(2)在组件中使用

axios模块化 vue vuex模块化开发_axios模块化 vue_04

 

axios模块化 vue vuex模块化开发_Vue_05

 

 

 

***  mapState和mapGetters的两种写法

axios模块化 vue vuex模块化开发_命名空间_06

5.vuex模块式开发

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的state、mutations、actions、getters、甚至是嵌套子模块。

5.1vuex中模块的基础使用(不开启命名空间时)

默认情况下,模块内部的 actions、mutations 和 getters 是注册在全局命名空间的——这样使得多个模块能够对同一 mutations 或 actions 作出响应。

对于actions、mutations 和 getters,是在模块中还是在全局中,它们的使用方式是相同的,只是state会有所不同,模块中的state会多一层模块名。格式变成

store.state.模块名.状态名

(1)store模块
创建一个带模块的根store

axios模块化 vue vuex模块化开发_Vue_07

axios模块化 vue vuex模块化开发_Vue_08

(2)store子模块
主题模块(store/modules/theme.js)内容

axios模块化 vue vuex模块化开发_数据_09

 

 

 

axios模块化 vue vuex模块化开发_命名空间_10

产品模块(store/modules/product.js)内容,类似于主题模块

(3)在组件中使用

 

axios模块化 vue vuex模块化开发_数据_11

 

 

axios模块化 vue vuex模块化开发_命名空间_12

5.2vuex中模块的基础使用(开启命名空间namespaced时)
如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块。当模块被注册后,它的所有 getters、actions 及 mutations 都会

自动根据模块注册的路径调整命名。所以开启命名空间的模块中的getters、actions 和 mutations的使用方式都会改变;但是开启命名空间和不开启命名空间的模块中的state的使用方式

不会改变。格式依然是store.state.模块名.状态名

开启store子模块的命名空间

axios模块化 vue vuex模块化开发_Vue_13

在组件中使用

axios模块化 vue vuex模块化开发_命名空间_14

 

 

axios模块化 vue vuex模块化开发_Vue_15