Vuex-核心概念-State 学习笔记

官方参考 进行了一些项目的实操, 当刚在代码中接触到了  mapState()   ...mapState 这样的代码时,一脸茫然,然后开始学习.

版本1:直接在模板中访问Vuex中的数据,见下面行4, 其中 1).\src\sotre\index.js 中new Vuex 对象 2).在 main.js 中注册这个Vuex对象,需调用 Vue.use(Vuex)

1 <div class="title border-topbottom">当前城市</div>
2 <div class="button-list">
3   <div class="button-wrapper">
4     <div class="button">{{this.$store.state.city}}</div>
5   </div>
6 </div>

版本2:使用Computer 计算属性解决

1 <div class="button-wrapper">
2  <div class="button">{{ currentCity }}</div>
3 </div>
4 
5 computed: {
6  currentCity () {
7   return this.$store.state.city
8  }
9 },

版本3.1: mapState 辅助函数,帮助我们快速生成计算属性,因为这里只有1个属性,所以简便性体会不是那么明显

 mapState()  函数属于 Vuex 组件绑定的辅助函数, 我们可以通过 API 查到它的出处, 当import Vuex之后, 在项目代码中就可以使用了,当然需要import它

import { mapState } from 'vuex'
1 computed: mapState({
2  currentCity: state => state.city
3 }),

注意书写语法,直接将mapState函数赋值给computed计算属性。mapState Vuex原生API 函数, 帮助我们快速生成计算属性,感觉像是语法糖衣

官网参考

版本3.2

1 <div class="button-wrapper">
2  <div class="button">{{ currentCityAlias }}</div>
3 </div>
4 
5 computed: mapState({
6  currentCityAlias: 'city' //传一个字符串'city',等价版本3.1中的语法
7 }),

除了给mapState对象传入对象作为参数,还可以传入一个数组,作用参考官网

为什么mapState之前需要... 这样的展开运算符呢?
版本3中的都是将mapState函数直接赋值给计算属性computed,因为mapState函数返回的是一个对象,如果将mapState函数与局部计算属性混合使用呢? 即将mapState函数返回值和其它成员"合成"一个对象赋值给computed

1 computed: {
2   localComputed () { /* ... */ },
3   // 使用对象展开运算符将此对象混入到外部对象中
4   ...mapState({
5     // ...
6   })
7 }

 再看一个例子

import { mapState } from 'Vuex'
computed: {
  ...mapState(['city'])//map成名字叫city的计算属性
}

 

posted @ 2021-02-24 11:15  轴轴  阅读(105)  评论(0编辑  收藏  举报