vuex是一个专门为vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态。
并以相应的规则保证状态已一种可预测的方式发生变化。
在构建一个中大型单页应用的时候,vuex就可以帮你更好的在组件外部管理状态。
vuex是模仿redux而开发的。redux由Flux演变而来,但是受Elem的启发,避开了Flux的复杂性。
vuex>redux>flux>Elm
每一个vuex的核心就是stroe(仓库)对象,store是一个容器,包含着大部分的状态(data)
vuex的状态存储是响应式的,当vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应组件也会得到更新。
不能直接改变store中的状态,改变store中的状态的唯一途径是提交mutations。这样使我们可以方便地跟踪每一个状态的变化,
总而让我们能够实现一些工具帮助我们更好的了解我们的应用。
在vue单文件里使用vuex,必须注册Vue.use(vuex)
创建一个仓库对象,方法的参数就是仓库的配置信息
1.state,代表仓库数据状态
2.getters,获取仓库的数据属性,相当于组件的计算结果(computed),其他组件可以通过仓库的gettres属性获取仓库数据。带返回值的函数,第一个参数
是state属性
3.mutations,修改仓库中的数据的属性,各个组件可以通过mutations来对数据进行修改,第一个参数是state对象,第二个参数是要设置的值。
. 4.actions,是如何处理数据,处理完的数据一般会通过提交mutations进行对仓库数据的修改,可以处理异步的数据,函数的参数是store,通过commit方法提交mutations。
actions中使用axios请求参数。需要导入axios和urlcode
import axios from ‘axios’
import urlcode from ‘urlcode-json’
在组件中使用仓库中的数据,通过下面这四个函数映射对象中的四个属性,可以理解为仓库对象的辅助函数
mapState mapGetyters mapMutations mapActions
通过this.$store获取仓库对象;
提交仓库的actions this.$store.dispatch();
通过提交mutations改变仓库的数据 this.$store.commit("");
通过对象展开符的写法映射仓库数据 ...mapState("仓库数据1","仓库数据2");
也可以映射仓库对象中的多个gettres
为了使各个组件都可以访问仓库对象,需要在根组件的构造函数中注册仓库对象。
import store from "仓库对象的文件路径"
new Vue({store})
详情请参考官方文档:https://vuex.vuejs.org/