Vuex知识点总结

VueX的使用

1.安装vuex的依赖包

npm install vuex --save

2.导入vuex包

import Vuex from 'vuex'
Vue.use(Vuex)

3.创建store对象

export default new Vuex.Store({
  state: {     
     count:0 
   },
)

4.将store对象挂载到Vue实例中

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

Vuex中的主要核心概念如下:

1.state
2.mutations
3.actions
4.getters

(一)state

state提供唯一的公共数据源,所有共享的数据都要统一放到Store的state中进行存储

创建数据源:
export default new Vuex.Store({ 
 state: {        
     count:0 
  },
)

组件访问state中数据的方式一:

<h3>当前最新的count值为:{{$store.state.count}}</h3>//this可省略

组件访问state中数据的方式二:

//导入state
import { mapState } from "vuex";
//将全局数据,映射为当前的计算的属性
 computed: {   
   ...mapState(["count"]), 
 },
  //直接引用
 <h3>当前最新的count值为:{{count}}</h3>
(二)mutations

mutations用于变更Store的数据,也就是修改state中定义的数据源。
注意:
①只能通过mutations变更Store的数据,不可以直接操作Store中的数据
②通过这种方式虽然操作起来稍微繁琐一些,但是可以集中监控所有数据的变化。

mutations变更Store的数据方式一:

//定义mutations
export default new Vuex.Store({ 
 state: {    
     count:0 
 },  
  mutations: {  
    add(state){  
        //变更    
        state.count++ 
    },    
},

//触发mutations
 methods: {    
    sum() {      
       //触发mutations的第一种方式    
       this.$store.commit("add");   
    },
 }


//定义mutations传参
mutations: {    		
    add(state){          
       state.count++ 
    },    
    //传参   
    addN(state,step){   
          state.count+=step;  
    },
}
//触发mutations时传参
 methods: {    
      sum() {      
            this.$store.commit("add");  
      },   
      sumN() {     
           //传参     
            this.$store.commit("addN",3);  
      },
}

mutations变更Store的数据方式二:

//导入mutations
 import { mapMutations} from "vuex";

 //通过刚才导入的mapMutations函数,将需要的mutations函数,映射为当前组件的methods方法
methods: {       
   ...mapMutations(["add", "addN"]),    
    sum() {     
       this.add();  
    },  
    sumN() {      
        this.addN(2); 
   },
 }
注意:不要在mutation函数中执行异步操作
(三)Action

Action用于处理异步任务
如果通过异步操作变更数据,必须通过Action,而不能使用mutation,但是在Action中还是要通过触发mutation的方式间接变更数据

Action处理异步任务一:

//定义actions
 mutations: {    
     add(state){     
        //变更      
        state.count++   
     },  
     //传参   
     addN(state,step){    
        state.count+=step; 
     },
},  
//用于处理异步任务,如果通过异步操作变更数据,必须Action,而不能使用Mutation  
 actions: {   
       addAsync(context){    
            setTimeout(()=>{      
                //在actions中,不能直接修改state中的数据;      
                //必须通过context.commit()触发mutation中的某个方法     
                context.commit('add')    
            },1000) 
       },   
       //携带参数
       addAsyncN(context,step){   
            setTimeout(()=>{        
                context.commit('addN',3) 
            },1000)   
       }, 
  },

//触发actions
 methods: {       
     //异步地让count自增+1    
     sumAction(){        
         //这里的dispatch函数,专门用来触发action       
         this.$store.dispatch('addAsync')  
     },   
     sumActionN(){    
            this.$store.dispatch('addAsyncN')   
     }
 },

Action处理异步任务二:

//导入mapActions
 import { mapActions} from "vuex";
  //通过刚才导入的mapActions函数,将需要的actions函数,映射为当前组件的methods方法
methods: {       
    ...mapActions(["addAsync","addAsyncN"]),
    sum() {     
       this.addAsync();  
    },  
    //传参
    sumN() {      
        this.addAsyncN(2); 
    },
 }
(四)Getter

①Getter可以对Store中已有的数据加工处理之后形成新的数据,类似Vue的计算属性。
②Store中数据发生变化,Getter的数据也会跟着变化

Getter加工Store数据的方式:

//定义Getter
getters:{   
   showNum(state){    
       return '当前最新的count值'+ state.count +' '    
   }
},

//使用方式一
<h3>{{this.$store.getters.showNum}}</h3>

//使用方式二
//导入mapGetters
import { mapGetters} from "vuex";
 
computed: {   
      ...mapGetters(["showNum"])
},

如果这篇文章对您有帮助,还请点个赞!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值