《vue-Vuex之store》

77 阅读1分钟

Vuex是什么

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

Mutations: 加工、维护

State: 状态和数据

Dispatch:派遣、发出

Commit:提交

Render: 渲染

Mutate:转变

从这些单词中,大体上可以概括整个图的流程。

VC派发(Dispatch)消息到Actions,Actions提交(Commit)到Mutation,Mutation转变(Mutate)state,然后重新渲染整个页面。

view—————=>actions——————=>mutations——————=>state——————=>view

安装 Vuex

注意:vue3只能用vuex4版本,vue2只能用vuex3版本。2022年2月7日之后,vue3成了默认版本,vuex4相应的也成了默认版本。所以对于vue2,要注明vuex的版本 @3

yarn add vuex@3.6.2 --save

用来管理状态,共享数据,在各个组件之间管理外部状态 如何使用?

  • 第一步:引入vuex,并通过use方法使用它
  • 第二步: 创建状态仓库
  • 第三步:通过this.$sore.state.XXX直接拿到需要的数据
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

//创建状态仓库 注意Store,state不能改
export default new Vuex.Store({
    state: {
        num: 88,
    }
})

1、Store

在main.js中引入Store

import store from "@/store";

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

通过this.$sore.state.XXX直接拿到需要的数据

computed: {
    getOutCount() {
      return this.$store.state.num;
    }
}

2、Mutations修改State: 状态和数据,并共享数据

在状态仓库里

mutations:{
  increase(state){
      state.num++;
  },
  decrease(state){
      state.num--;
  }
}

组件中

methods:{
    oadd(){
      this.$store.commit('increase');//increase在mucations中定义的方法名
    }
}

Mutations:传的参数是state,直接改变状态

3、actions:

  • 传的参数是上下文对象
  • actions提交的是Mutations,而不是直接变更状态
  • actions可以包含异步操作,但是mutation只能包含同步操作

在状态仓库里

actions:{
    decreaseAction(context){
        //action中只能对mutations进行操作
        context.commit('decrease');
    }
}

this.$store.dispatch('decreaseAction');在实例中操作

methods:{
    oadd(){
      this.$store.commit('increase');
    },
    ominusAction(){
      this.$store.dispatch('decreaseAction');
    }
}

4、getters

通过getters来获取state,要更改获取方式this.$store.getters.getCount

getters:{
    getNum(state){
        return state.num > 0 ? state.num : 0;
    }
}
computed: {
    getOutCount() {
      // return this.$store.state.num;
      return this.$store.getters.getNum;

    },
},