详解vuex的简单使用
1目录的配置
根据官方推荐在src目录里面创建store目录
2创建store里面的文件
根据官方推荐创建actions.js,getters.js,index.js,mutations.js,mutations-types.js,state.js
2.1state.js
state.js:是vuex的单一状态数,用一个对象就包含了全部的应用层级状态。至此它便作为一个『唯一数据源(SSOT)』而存在。这也意味着,每个应用将仅仅包含一个store实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。(用来管理所有vuex状态数据)
/* *是vuex的单一状态数,用一个对象就包含了全部的应用层级状态 *单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。(用来管理所有vuex状态数据) * */ conststate={ //城市状态,用来管理城市 city:{}, cityList:[], fullScreen:true, palyer:false }; exportdefaultstate;
2.2mutations-types.js存取mutations相关的字符常量(一些常量)
/* *存取mutations相关的字符常量 * */ //定义常量并导出 exportconstSET_CITY='SET_CITY'; exportconstSET_PLAY='SET_PLAY'; exportconstSET_FULL_SCREEN='SET_FULL_SCREEN'; exportconstSET_CITY_LIST='SET_CITY_LIST';
2.3mutations.js(定义修改的操作)
更改Vuex的store中的状态的唯一方法是提交mutation。Vuex中的mutations非常类似于事件:每个mutation都有一个字符串的事件类型(type)和一个回调函数(handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受state作为第一个参数
/* *更改Vuex的store中的状态的唯一方法是提交mutation *Vuex中的mutations非常类似于事件:每个mutation都有一个字符串的事件类型(type)和一个回调函数(handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受state作为第一个参数 */ //导入mutation-type.js里面所有的常量 import*astypesfrom'./mutation-types'; //定义一个mutation可以供设置和修改值 constmutations={ /* *1表达式作为属性表达式放在方括号之内 *2形参state(获取当前状态树的state) *3形参city,是提交mutation时传的参数 *4使用mutation便于书写方便 *5这个操作相当于往state.js里面写入city */ [types.SET_CITY](state,city){ state.city=city; }, [types.SET_CITY_LIST](state,list){ state.cityList=list; }, [types.SET_FULL_SCREEN](state,flag){ state.fullScreen=flag; }, [types.SET_PLAY](state,palyState){ state.palyer=palyState; } }; //导出mutation exportdefaultmutations;
2.4getters.js有时候我们需要从store中的state中派生出一些状态。
mapGetters辅助函数仅仅是将store中的getters映射到局部计算属性
/* *有时候我们需要从store中的state中派生出一些状态 *这里的常量主要是对state里面做一些映射 *mapGetters辅助函数仅仅是将store中的getters映射到局部计算属性 */ //对state里面的属性做一些映射 exportconstcity=state=>state.city;//箭头函数的简写 exportconstcityList=state=>state.cityList; exportconstfullScreen=state=>state.fullScreen; exportconstpalyer=state=>state.palyer;
2.5actions.js
Action类似于mutation,不同在于:
- Action提交的是mutation,而不是直接变更状态。
- Action可以包含任意异步操作。
- 在一个动作中多次改变mutation可以封装一个action
/* *actions类似mutation *区别: *1:action提交的是mutation *2:action可以包含任意异步操作 */ /* *使用: *1:在一个动作中多次改变mutation可以封装一个action */ import*astypesfrom'./mutation-types'; exportconstselectList=function({commit,state},{list,index}){ commit(types.SET_CITY_LIST,list); commit(types.SET_PLAY,false); commit(types.SET_FULL_SCREEN,true); };
2.6index.js入口
/* *入口 */ importVuefrom'vue'; importVuexfrom'vuex'; //import*asobjfrom'xxxx';会将xxxx中所有export导出的内容组合成一个对象返回。 import*asactionsfrom'./actions'; //拿到getters里面的映射 import*asgettersfrom'./getter'; importstatefrom'./state'; importmutationsfrom'./mutations'; importcreatedLoggerfrom'vuex/dist/logger'; Vue.use(Vuex); constdebug=process.env.NODE_ENV!='production'; exportdefaultnewVuex.Store({ actions, getters, state, mutations, strict:debug, plugins:debug?[createdLogger()]:[] });
3使用
3.1在mian.js注册store
在main.js里面new的Vue的实例里面注册store
3.2写入值,要在组件中引入mapMutations的语法糖
引入语法糖
import{mapMutations,mapActions}from'vuex';
在methods里面mapMutations辅助函数将组件中的methods映射为store.commit调用
...mapMutations({ //这里和mutation里面的常量做一个映射 setCity:'SET_CITY' })
在需要的地方写入值
this.setCity(city);
3.3获取值
获得vuex中的值,要在组件中引入mapGetters(mapGetters辅助函数仅仅是将store中的getters映射到局部计算属性)
引入mapGetters
import{mapGetters}from'vuex';
在computed计算属性里面使用对象展开运算符将getters混入computed对象中
computed:{ //这里面的city映射的是state.js里面的city //可以映射多个值 ...mapGetters([ 'city', 'cityList', 'palyer', 'fullScreen' ]) }
拿到值
created(){ console.log(this.city); console.log(this.cityList[1]); console.log(this.palyer); console.log(this.fullScreen); }
3.4action存入值
...mapActions(['selectList'])
在需要存入的地方使用
this.selectList({ list:this.citys, index:1 });
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。