介绍:
本文主要介绍vuex 中五个核心概念的基本用法,帮助对于不太看懂官方文档的同学
前提:
1. 熟悉vue的基本用法(至少官方的api大概都会用)
2.能创建基本vue-cli脚手架
3.熟悉es6(也叫es2015),去看一下阮一峰es6入门(箭头函数,解构赋值,扩展运算符,module,这几个比较重要常见,也非常有用)
准备阶段:
1.搭建完一个基本vue-cli 脚手架
1.安装vuex,
命令行输入 `npm install vuex`
2.完成2个组件和一个stroe.js文件
hello.vue文件
ctrl.vue文件
text.vue
store.js
在main.js 将vuex注入到vue实例中
运行效果图
组件获取state 两种方法获取
1.$store.state.list (直接获取 数据量小用这个就行)
2.利用mapState映射 (数据量大复杂用这个)
...mapState(['list']) 这种里面是数组写法,组件用list来获取
...mapState({ls:'list'}) 这种里面是对象写法,组件用ls来获取(ls就是list新的名字)
组件获取getters方法 getters就是state的一个计算属性,类似 vue实例里面的data和computed,两种方法获取
1.$store.getters.getTexts(直接获取)
2.利用mapGetters映射
...mapGetters(['getTexts']) 这种里面是数组写法,方法用getTexts来获取
...mapGetter({gt:'getTexts'}) 这种里面是对象写法,组件用gt来获取(ge就是GetText新的名字)
组件获取mutations方法并触发
1.$store.commit('add',[11,22,33,44,55,66]) (在组件点击事件里面直接触发)
2.利用mapMutations映射
...mapMutations(['add']) 这种里面是数组写法,方法用add来使用
...mapMutations({ad:'add'}) 这种里面是对象写法,组件用ad来使用(ad就是add新的名字)
组件获取actions方法并触发
1.$store.dispatch('add',[11,22,33,44,55,66]) (在组件点击事件里面直接触发)
2.利用mapMutations映射
...mapActions(['asyncfn']) 这种里面是数组写法,方法用add来使用
...mapActions({afn:'asyncfn'}) 这种里面是对象写法,组件用afn来使用(afn就是asyncfn新的名字)
ps:这也是醉了,第一次写,死活复制不了代码,干脆就一起图片文字一起写了
利用module 将store数据划分更细的模块
user.js
project.js 和user.js 一样,就是list 数据不一样
store.js文件
ctrl.vue文件
test.vue文件
运行效果图
整理一下
获取不同的模块下面的state数据,
this.$store.state.a.list
获取不同模块的getters和mutations和actions,首先将namespaced:true属性,加入模块这样每一个getters,mutations,actions都会有各组模块的前缀,之后利用mapGetter来将getter里面的方法映射到我们的组件中(如果不加namespaced:true属性,所有的模块的getters下面的方法会在一个命名空间内,(也就是在一个对象内),你只能让getters下面的每个方法名字不一样才能正常获取,如果方法名字重复了,你只能获取第一个)
```
...mapGetter('a/',[
'getText'
])
```
或者
```
...mapGetter('a/',{
gt:'getText'
})
```
或者
```
...mapGetter({
gt:'a/getter'
})
```
同理 ,利用mapMutations和mapAction将mutations和actions页getters类似
最后后在组件中直接调用就行了,
ps:就算不加入namespaced:true属性也是可以的,这样你必须让所有模块内部getters,里面的方法名字不一样,才能利用this.$store.getters.(独一无二的名字).或者mapgetters映射(不加入模块名字的情况下)使用,mutations,actions也是一样的。
真的蛋疼,这个代码块弄了好久弄不出来,只好全是图片了,大家凑合看吧。。