【vuex】
vuex是一个专门为vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有的组件状态,并以相应的股则保证状态以一种可预测的方式发生改变
 
状态管理应用包含以下几个部分:
》state:驱动应用的数据源
》view:以声明方式将state映射到视图
》actions: 响应在view上的用户输入导致的状态变化
 
为什么要使用vuex?
 
传统的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力,而且对于父子组件直接或者通过事件来变更和同步状态的多分拷贝,以上的这些模式非常脆弱,通常会导致无法维护代码,所以把组件的共享状态抽取出来,以一个全局单例模式管理,在这种模式下,我们的组件树构成了一个巨大的:视图,不管树在那个位置,任何组件都能获取状态或者触发行为,并且通过定义和隔离状态管理中的各种概念并强制遵守一定的规则,我们的代码将变得更结构化且易于维护
 
vuex的数据流向:

vuex的完整流程:组件中触发action,action提交mutation,mutation修改state。根据组件state或者getters来渲染页面

vuex包含五个基本的对象:
  • state:存储状态。也就是变量;
  • getters:派生状态。也就是set、get中的get,有两个可选参数:state、getters分别可以获取state中的变量和其他的getters。外部调用方式:store.getters.personInfo()。就和vue的computed差不多;
  • mutations:提交状态修改。也就是set、get中的set,这是vuex中唯一修改state的方式,但不支持异步操作。第一个参数默认是state。外部调用方式:store.commit('SET_AGE', 18)。和vue中的methods类似。
  • actions:和mutations类似。不过actions支持异步操作。第一个参数默认是和store具有相同参数属性的对象。外部调用方式:store.dispatch('nameAsyn')。
  • modules:store的子模块,内容就相当于是store的一个实例。调用方式和前面介绍的相似,只是要加上当前子模块名,如:store.a.getters.xxx()。
 
 
【state】:
单一状态树,
store 是响应式的,无论 state 什么时候更新,组件都将同步更新
 
辅助函数:mapState
当一个组件需要获取多个状态的时候,将这些状态都声明为计算机属性会有些重复和冗余。为了解决这个问题可以使用mapState 辅助函数帮助我们生成计算属性
 
【getter】
 
可以认为getter是 store的属性计算,就像计算属性一样,getter的返回值会根据他的依赖被缓存起来,且只有当他的依赖发生变化的时候才会被重新计算
 
 
【mutation】
更改vuex的store中的状态的唯一的方法就是提交mutation。vuex中的mutation 非常类似于事件:每个mutation都有一个字符串事件类型和一个回调函数(handler)。这个回调函数就是我们实际进行状态更改的地方,并且他会接受state这样第一个参数
不能直接调用一个mutation handler,需要以相应的type 调用store.commit 方法
 
mutation必须是同步函数
 
【action】
action类似于mutation,但不同在于:
  • action 提交的是mutation,而不是直接更爱变更状态
  • action可以包含任意异步操作
action通过store.dispatch方法触发
 
【module】
由于使用单一状态树,应用的所有状态会集中到一个比较大的对象,当应用变得哦非常负责的时候,store对象就可能变得相当臃肿,
所以讲store分割成模块,每个模块有自己的state,mutation,action,getter