Vuex入门

158 阅读2分钟

Vuex

介绍

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

组成

vuex由五个部分组成,分别是State,Mutation,Action,Module,Getter。

属性解释
State共享状态(即变量),类似于data
Mutation更改vuex的store中state的唯一方法,只有通过提交mutation才能修改状态(变量值)
Action类似mutation,修改store中的状态。但是刚才说过只有通过提交mutation才能修改状态,所以Action也是通过提交mutation修改store中的状态 ,与Mutataion不同的是Action支持异步操作
Module模块,在大型项目中为了方便状态的管理和协作开发将store拆分为多个子模块(modules),每个子模块拥有完整的state、mutation、action、getter。(这篇不会介绍这个)
Getter基于state的派生状态,可理解为组件中的计算属性

安装

npm install vuex --save

vue2的项目只能使用vuex3版本

使用方法

在src目录下面新建store文件夹=>创建index.js文件

vuex.PNG

import Vue from "vue";
import Vuex from "vuex";
​
//main.js中引入Vue 和Vuex,然后使用Vuex
Vue.use(Vuex);
​
//响应组件的动作这里可以异步加载
let actions = {
  numberIncrease(context, value) {
    //提交事务(‘调用的方法’,值)
    context.commit("NUMBER_INCREASE", value);
  },
  numberMinus(context, value) {
    context.commit("NUMBER_MINUS", value);
  },
  
  //延迟添加
  delayAddNumber(context, value) {
    setTimeout(() => {
      context.commit("NUMBER_INCREASE", value);
    }, 2000);
  },
  //当偶数时添加
  onEvenAddNumber(context, value) {
    if (context.state.number % 2 === 0) {
      context.commit("NUMBER_INCREASE", value);
      return;
    }
    alert("onEvenAddNumber");
  },
};
​
//用于直接操作数据 这里面的操作是同步的  mutations中的方法名字建议大写这样方便区分
let mutations = {
  NUMBER_INCREASE(state, value) {
    state.number += value;
  },
  NUMBER_MINUS(state, value) {
    state.number -= value;
  },
};
​
//state储存数据类似于data
let state = {
  number: 10,
};
​
//计算属性
let getters = {
  bigNumber(state) {
    return state.number * 10;
  },
};
​
//抛出store
export default new Vuex.Store({
  actions,
  mutations,
  state,
  getters,
});
​

组件中的使用

//this.$store.dispatch("actions中的方法名", 传递的值);this.$store.dispatch("numberIncrease", this.number);

标签中取出State或getter的值

取出state的值

{{ $store.state.属性民 }}

取出getter的值

{{ $store.getters.方法名 }}

\