Vuex

103 阅读2分钟

1.Vuex的定义:

Vuex是一个专门为Vue.js应用程序开发的一个状态管理模式

2.Vuex的作用

当多个组件同时需要访问一个变量时,Vuex则可以轻松满足这个需求

3.Vuex使用前的配置

(1)首先需要通过命令安装Vuex npm install Vuex

(2)创建一个新的文件夹名为store,在store里在创建一个index.js

image.png 代码为:

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

// 1.安装插件
Vue.use(Vuex)

// 2.创建对象
const store = new Vuex.Store({
    state: {},
    mutations: {},
    actions: {},
    getters: {},
    modules: {}

})

//3.导出store独享

export default store

(3)在main.js里挂载

image.png

Vuex的实例图

image.png

从图中可以清楚的看到state可以用以多界面,但是要修改state需要通过Mutations来修改,不能在组件里直接修改,因为这样devtools便不能跟踪state的修改,在后续出了问题不能清楚的看到是那个界面修改了state。action则是处理异步操作,主要是后端请求。后面会逐个分析上面创建对象里面的意义。

4 vuex的五大核心属性

4.1 state

存放状态的地方,与data类似

4.2 mutations(不能进行异步操作)

用于对state状态进行修改,如图所示

image.png

调用:

image.png

需要传参时,比如需要点一个按钮使得conter加五,另一个conter加十,如何实现?

image.png

image.png

4.3 actions(进行异步操作)

这里通过一个实例来解释一下,如果这里需要在一秒后对person中的name属性进行修改

image.png

首先我们将这个方法放在mutation中

image.png

虽然数据是渲染出来了,但是vue-devtool中却没有改变

image.png

所以我们需要将异步操作放入action中:

image.png

image.png

vue-devtool也正常更新数据

image.png

所以异步操作action里面执行,包括数据请求等。这里可以看出mutation中的方法是用commit调用,但是action中的方法是用display调用。

4.4 getters

类似于vue中的computed属性 调用方式:

this.$store.getters.方法名

4.5 modules

因为vuex是一个单一状态树,所以只有一个store实例,但是这样有时状态多了过后就会显得臃肿,所以需要modules来分模块,这样我们就可以把各个模块的数据分开

image.png

调用方法,比如调用a

this.$store.state.a.

因为a其实是放在state里面的,其它调用方法也类似 mutation调用就是

this.$store.commit(')

所以需要注意各个模块命名别重名