Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。
以上是vuex的官方文档对vuex的介绍,官方文档对vuex的用法进行了详细的说明。这里就不再细讲vuex的各个用法,写这篇博客的目的只是帮助部分同学更快地理解并上手vuex。
为什么要用vuex
不知道现在读这篇博客的同学是否有看过Vue2.0子父组件之间通信,子父组件之间的基本通信方式。我们通信的目的往往就是在组件之间传递数据或组件的状态(这里将数据和状态统称为状态),进而更改状态。但可以看到如果我们通过最基本的方式来进行通信,一旦需要管理的状态多了,代码就会变得十分混乱。对所有状态的管理便会显得力不从心,尤其是多人合作的时候。
此时vuex出现了,他就是帮助我们把公用的状态全抽出来放在vuex的容器中,然后根据一定的规则来进行管理
Vuex的核心
vuex由以下几部分组成:
state里面就是存放项目中需要多组件共享的状态
mutations就是存放更改state里状态的方法
getters就是从state中派生出状态,比如将state中的某个状态进行过滤然后获取新的状态。
actions就是mutation的加强版,它可以通过commit mutations中的方法来改变状态,最重要的是它可以进行异步操作。
modules顾名思义,就是当用这个容器来装这些状态还是显得混乱的时候,我们就可以把容器分成几块,把状态和管理规则分类来装。这和我们创建js模块是一个目的,让代码结构更清晰。
实例来理解Vuex
// 实例化vuex状态库var vuexStore = new Vuex.Store({ state:{ message:'Hello World', bookList:[ { name:'javascript权威指南', price:100, en:'jq' }, { name:'angularjs权威指南', price:80, en:'aq' }, { name:'HTTP权威指南', price:50, en:'hq' } ] }, mutations:{ //同步 showMessage:function(state,data){ state.message = 'Store mutations changed this words。'+data; } addBook:function(state,data){ state.bookList.push(data) } }, getters:{ filterPrice:function(state){ var narr = []; for(var i = 0;i<state.bookList.length;i++){ state.bookList[i].price<85 ? narr.push(state.bookList[i]) : null; } return narr; } }, actions:{ //异步操作 addBook:function(context){ setTimeout(function(){ context.commit('addBook',{name:'HTML5权威指南',price:75}); },2000); } }, modules:{ a:storeA,b:storeB }});// vue 实例var vm = new Vue({ el:'app', store:VuexStore, methods:{ showMessage:function(){ this.$store.commit('showMessage','荷载数据') }, filterList:function(){ return this.store.getters.filterPrice(); }, addBooks:function(){ this.$store.dispatch('addBook') }, }});
新闻热点
疑难解答
图片精选