vuex

model.js
const state={   //要设置的全局访问的state对象,初始属性值
     showFooter: true,
     changableNum:2
   };

const getters = {   //实时监听state值的变化(最新状态)
    isShow(state) {  //承载变化的showFooter的值
       return state.showFooter
    },
  isShow(state) {  //承载变化的showFooter的值
        return state.showFooter+10    //允许我们在 store 中定义“getter”
    },
    getChangedNum(){  //承载变化的changebleNum的值
       return state.changableNum
    }
};

 const actions = {
    hideFooter(context) {  //自定义触发mutations里函数的方法,context与store 实例具有相同方法和属性
        context.commit('hide');
    },
    showFooter(context) {  //同上注释
        context.commit('show');
    },
    setNewNum(context,num){   //同上注释,num为要变化的形参
       console.log(context)
       console.log(num)
         context.commit('newNum',num)
     }
    setNewNum({ commit, state },num){
      commit('newNum',num)
    }
};

const mutations = {
  show(state) {   //自定义改变state初始值的方法,这里面的参数除了state之外还可以再传额外的参数(变量或对象);
      state.showFooter = true;
  },
  hide(state) {  //同上
      state.showFooter = false;
  },
  newNum(state,sum){ //同上,这里面的参数除了state之外还传了需要增加的值sum
     state.changableNum+=sum;
  }
};
export default{
    state,
    getters,
    mutations,
    actions
}
 
 
 
component文件
<template>
  <div id="app">
   
  state
    <p>{{stateIsshow}}--stateIsshow</p>
   <p>{{ statefilter }} </p>  

  getters:
    <p>{{gettersIsshow}} -- gettersIsshow</p>
    <p>{{mapGettersIsshow}} -- mapGettersIsshow</p>

 mapActions
    <button @click="clickNum()">getNewNum+30</button>
 
 dispatch
    <button @click="clickShow">dispatch show</button>
    <button @click="clickHide">dispatch hide</button>
    <button @click="clickgetSet()">clickgetSet</button>
    <p>{{getSetShow}} -- getSetShow</p>

  </div>
</template>

<script>
import {mapState, mapGetters,mapActions } from 'vuex';
export default {
  name: 'App',
  data() {
    return {
      msg: 'App',
    }
  },
  computed:{
    ...mapState({
       stateIsshow:state=>state.count.showFooter,
  statefilter:state=>state.count.showFooter+2   //可以处理
    }),
    ...mapGetters({
      mapGettersIsshow:'isShow',
         mapgetChangedNum:'getChangedNum'
    }),
    gettersIsshow(){
      return this.$store.getters.isShow
    },
    getSetShow:{
      get() {
        return this.$store.getters.getChangedNum
      },
      set(val){
        this.$store.dispatch('setNewNum', val)
      }
    }
  },
  methods:{
    ...mapActions({
        setNewNum:'setNewNum'
    }),
    clickNum(){
      this.setNewNum(30)
    },
    clickgetSet(){
      this.getSetShow=+20   //只要getSetShow改变,就会触发getSetShow的get,和set
    },
    clickShow(){
      this.$store.dispatch('showFooter');
    },
    clickHide(){
      this.$store.dispatch('hideFooter');
    },
  },
  mounted(){
    console.log(this.$store)
  },
}
</script>
原文地址:https://www.cnblogs.com/init00/p/12606078.html