Vuex核心概念
-
Vuex有几个比较核心的概念:
- State
- Getters
- Mutation
- Action
- Module
state
State单一状态树
- Vuex提出使用单一状态树, 什么是单一状态树呢?
- 英文名称是Single Source of Truth,也可以翻译成单一数据源
- 但是,它是什么呢?我们来看一个生活中的例子
- OK,我用一个生活中的例子做一个简单的类比
- 我们知道,在国内我们有很多的信息需要被记录,比如上学时的个人档案,工作后的社保记录公积金记录,结婚后的婚姻信息,以及其他相关的户口、医疗、文凭、房产记录等等(还有很多信息)
- 这些信息被分散在很多地方进行管理,有一天你需要办某个业务时(比如入户某个城市),你会发现你需要到各个对应的工作地点去打印、盖章各种资料信息,最后到一个地方提交证明你的信息无误
- 这种保存信息的方案,不仅仅低效,而且不方便管理,以及日后的维护也是一个庞大的工作
- 这个和我们在应用开发中比较类似:
- 如果你的状态信息是保存到多个Store对象中的,那么之后的管理和维护等等都会变得特别困难
- 所以Vuex也使用了单一状态树来管理应用层级的全部状态(唯一数据源)
- 单一状态树能够让我们最直接的方式找到某个状态的片段,而且在之后的维护和调试过程中,也可以非常方便的管理和维护
Getters
Getters基本使用
-
基本使用
//相当于计算属性 getters:{ powerCounter(state){ return state.counter * state.counter } }在App.vue中引入数据
<h2>-------vuex getters内容--------</h2> <p>{{$store.getters.powerCounter}}</p>效果展示
-
有时候,我们需要从store中获取一些state变异后的状态,比如下面的Store中:
state:{ counter:0, students:[ {id:100,name:"waws",age:19}, {id:101,name:"waws1",age:69}, {id:102,name:"waws2",age:39}, {id:103,name:"waws3",age:9}, {id:104,name:"waws4",age:20} ] },- 我们可以在Store中定义getters:获取学生年龄大于20的个数
getters:{ powerCounter(state){ return state.counter * state.counter }, greaterAgesCount:state=>{ return state.students.filter(s=>s.age > 20).length } }
Getters作为参数和传递参数
-
如果我们已经有了一个获取所有年龄大于20岁学生列表的getters, 那么代码可以这样来写
getters:{ powerCounter(state){ return state.counter * state.counter }, greaterAgesthan20Element:state=>{ return state.students.filter(s=>s.age > 20) }, // 将getters作为参数向另一个getters函数中进行传递 greaterAgesthan20ElementLength:(state,getters)=>{ return getters.greaterAgesthan20Element.length } }App.vue
<h2>-------vuex getters内容--------</h2> <p>{{$store.getters.powerCounter}}</p> <p>{{$store.getters.greaterAgesthan20Element}}</p> <p>{{$store.getters.greaterAgesthan20ElementLength}}</p> -
getters默认是不能传递参数的, 如果希望传递参数, 那么只能让getters本身返回另一个函数
-
自定义年龄,过滤年龄在age之上的学生
//传递参数其实就是返回一个函数 zidingyimorethan20(state){ return function (age){ return state.students.filter(s => s.age > age) } }App.vue
<p>{{$store.getters.zidingyimorethan20(40)}}</p>
-