Vuex状态管理
安装与引入
1.安装
npm install vuex –save
2.新建文档store.js引入vuex
1 | import Vue from 'vue'; |
完成以上就成功创建了一个vuex的仓库文件了。
state访问状态对象
state我感觉像是vue里面的data,放的是基本属性。
1.在store.js文件里增加一个常量对象。
1 | const state={ |
2.用export default
封装代码,让外部可以引用。
1 | export default new Vuex.Store({ |
3.vue组件中怎么用到呢,我们可以新建一个组件
1 | <template> |
4.你会发现<p></p>
这里读取的值很长,并不美观,其实有更简洁的写法,就是通过mapState
辅助函数来赋值
1 | <template> |
Mutations修改状态
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation,我感觉 mutation 像是 vue 中的 methods 方法或者叫事件。
1.在store.js中加入两个方法
1 | const mutations={ |
2.切记在export default
封装代码中加入引用,让外部可以引用。
1 | export default new Vuex.Store({ |
3.在组件中加入两个按钮,使用仓库中的方法
1 | <p> |
$store.commit()
这个是vue中规定的调用写法
4.同样你会发现$store.commit('add')
这里读取的值也很长,也并不美观,当然和上面的state
一样有更简洁的写法,就是引入mapMutations
1 | <template> |
5.传值
使用mutation是可以写入参数的,但样式上和我们一般看的不一样,因为它的方法默认接收state为第一参数,也就是说我们调用方法时输入的第一个参数,在store.js中的mutations里将是第二个参数。如下,修改store.js1
2
3
4
5
6
7
8
9const mutations = {
//add方法中加入传值参数n
add(state, n) {
state.count += n;
},
reduce(state) {
state.count--;
}
}
组件中使用1
2
3
4
5<p>
<!-- 直接传入参数即可 -->
<button @click="add(10)">+</button>
<button @click="reduce">-</button>
</p>
getters计算过滤操作
getters就是一个过滤器的样子,感觉可以理解为vue中的计算方法computed。
1.我们首先要在store.js里用const声明我们的getters属性。
1 | const getters = { |
2.同理在export default
封装代码中加入引用。
1 | export default new Vuex.Store({ |
3.在组件中使用
1 | computed:{ |
写了这个配置后,在每次count的值发生变化的时候,都会进行加10的操作。
4.用mapGetters简化写法
1 | <template> |
如此也能达到在每次count的值发生变化的时候,都会进行加10的操作。(就是执行了getters里的过滤方法了)
actions异步修改状态
actions和之前讲的Mutations功能基本一样,不同点是,actions是异步的改变state状态,而Mutations是同步改变状态。而如何证明是异步的呢,我们以下实验一下即可
1.在store.js中加入
1 | const actions = { |
context:上下文对象,可以理解为store本身。
{commit}:直接把commit对象传递进去,更容易理解为直接调用mutations里的方法。
2.同理在export default
加入引用
1 | export default new Vuex.Store({ |
3.在组件中使用(直接用mapActions了)
1 | <template> |
在此,你点击异步的
+按钮
,然后查看控制台就会发现,先打印了我先执行
然后三秒后再打印出我后执行
的异步操作了。
最后放出store.js和组件模板的代码
store.js
1 | import Vue from 'vue' |
组件模板
1 | <template> |