this.$store.dispatch() 与 this.$store.commit()方法的区别

1,946 阅读1分钟

一、了解一下vuex存取异步与同步方法

this.$store.dispatch() 与 this.$store.commit()方法的区别

总的来说他们只是存取方式的不同,两个方法都是传值给vuex的mutation改变state

含有异步操作,例如向后台提交数据

this.$store.dispatch() ,写法:this.$store.dispatch(‘action方法名’,值)

同步操作

this.$store.commit(),写法:this.$store.commit(‘mutations方法名’,值)

commit: 同步操作

存储 this.$store.commit('changeValue',name)
取值 this.$store.state.changeValue

dispatch: 异步操作

存储 this.$store.dispatch('getlists',name)
取值 this.$store.getters.getlists

二、了解一下store基本属性,分别有着怎样的作用

const store = new Vuex.Store({

    // 定义的公共变量
    state: {
          count: 1,
          stu: [{id:1,age:18,name:'dx'},{id:2,age:20,name:'yx'},{id:3,age:100,name:'xx'}]
    },

    // state中的变量只能在mutations中通过方法修改
    mutations: {

      //当你需要改变state并且同步的时候在这里
      changeCount: function (state) {
            state.count++
            console.log('改变了count')
      }

    },

    //这里的东西全都是异步的
    actions: {

    },

    getters: {
        //当你需要改变state,并且需要经过比较复杂的计算时
        //里面的东西全都是一些方法
        //如果计算的东西,不需要组件传回参数,就直接返回一个值,
        more20age(state){
            return state.stu.filter(s =>s.age>=20) 
        }

       //如果计算的东西,需要组件传回参数,就返回一个方法
        moreage(state){
            return function(age){
                return state.stu.filter(s =>s.age>=age)
            }
        }
    }
    
    // vuex持久化多模块 需要启用命名空间
    namespaced:true;

})