Vuex的核心概念

Vuex的核心概念 State state提供唯一的公共数据源,所有共享的数据都要统一放到Store的State中进行存储。 store.js //创建store数据源,提供唯一公共数据 const store = new Vuex.Store({ state:{count:0} }) 组件访问State中数据 第一种方式: this.$store.state.count //count是全局数据名称 第二种方式: //从vuex中按需导入mapState函数 import { mapState } from 'vuex' 通过刚才导入的mapState函数,将当前组件需要的全局数据,映射为当前组件的computed计算属性: computed:{ ...mapState(['count']) } Mutation Mutation用于变更Store中的数据 1.只能通过mutation变更Store数据,不可以直接操作Store中的数据。 2.通过这种方式虽然操作起来稍微繁琐一些,但是可以集中监控所有数据的变化。 //定义Mutation const store = new Vuex.Store({ state: { count:0 }, mutations:{ add(state){ //变更状态 state.count++ } } }) //触发mutation methods:{ hande(){ //触发mutation的第一种方式 this.$store.commit('add') } } 可以在触发mutations时传递参数 const store = new Vuex.Store({ state:{ count:0 }, mutations:{ addN(state,step){ // 变更状态 state.count +=step } } }) //触发mutation methods:{ handle2(){ //在调用commit函数 //触发mutations时携带参数 this.$store.commit('addN',3) } } this.$store.commit()触发mutations的第一种方式,触发mutations的第二种方式: //1.从vuex中按需导入mapMutations函数 import { mapMutations } from 'vuex' 通过刚才导入的mapMutations函数,将需要的mutations函数,映射为当前组件的methods方法: //2.将指定的mutations函数,映射为当前组件的methods函数 methods:{ ...mapMutations(['add','addN']) } Action Action用于处理异步任务 如果通过异步操作变更数据,必须通过Action,而不能使用Mutation,但是Action中还是要通过触发Mutation的方式间接变更数据。 //定义Action const store = new Vuex.Store({ // ...省略其他代码 mutations:{ add(state){ state.count++ } }, actions:{ addAsync(context){ setTimeout(() =>{ context.commit('add') },1000) } } }) //触发Action methods:{ handle(){ //触发actions第一种方式 this.$store.dispatch('addAsync') } } 触发actions异步任务携带参数: //定义Action const store = new Vuex.Store({ // ...省略其他代码 mutations:{ addN(state,step){ state.count += step } }, action:{ addNAsync(context,step){ setTimeout (() => { context.commit('addN',step) },1000) } } }) //触发Action methods:{ handle(){ //在调用dispatch函数 //触发actions时携带参数 this.store.dispatch('addNasync',5) } } this.$store.dispatch()是触发actions的第一种方式,触发actions的第二种方式: //1.从vuex中按需导入mapActions函数 import { mapActions } from 'vuex' 通过刚才导入的mapActions函数,将需要的actions函数,映射为当前组件的methods方法: //2.将制定的actions函数,映射为当前组件的methods函数 methods:{ ...mapActions(['addASync','addNASync']) } Getter Getter用于对Store中的数据进行加工处理形成新的数据。 1.Getter可以对Store中已有的数据加工处理之后形成新的数据,类似Vue的计算属性。 2.Store中数据发生变化,Getter的数据也会跟着变化。 // const store = new Vuex.Store({ state:{ count:0 }, getters:{ showNum:state =>{ return '当前最新的数量是[‘+ state.count +’]' } } }) 使用getters的第一种方式: this.$store.getters.名称 使用getters的第二种方式: import { mapGetters } from 'vuex' computed:{ ...mapGetters(['showNum']) }

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):