首页 > 语言 > JavaScript > 正文

详解vue组件化开发-vuex状态管理库

2024-05-06 15:18:39
字体:
来源:转载
供稿:网友

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

以上是vuex的官方文档对vuex的介绍,官方文档对vuex的用法进行了详细的说明。这里就不再细讲vuex的各个用法,写这篇博客的目的只是帮助部分同学更快地理解并上手vuex。

为什么要用vuex

不知道现在读这篇博客的同学是否有看过Vue2.0子父组件之间通信,子父组件之间的基本通信方式。我们通信的目的往往就是在组件之间传递数据或组件的状态(这里将数据和状态统称为状态),进而更改状态。但可以看到如果我们通过最基本的方式来进行通信,一旦需要管理的状态多了,代码就会变得十分混乱。对所有状态的管理便会显得力不从心,尤其是多人合作的时候。

此时vuex出现了,他就是帮助我们把公用的状态全抽出来放在vuex的容器中,然后根据一定的规则来进行管理

Vuex的核心

vuex由以下几部分组成:

    state mutations getters actions modules

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')    },  }});            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选