笔记
原则:不要在使用过长的 插值语法 。
map*** 写法,一共有4种,本节先讲两个:mapSate mapGetters
重要文件源码
Count.vue
<template>
<div>
<!-- 把上节的插值优化,使用简单的插值语法。 借助:计算属性 -->
<h1>当前求和为:{{sum}}</h1>
<h3>当前求和放大10倍为:{{bigSum}}</h3>
<h3>我在{{school}},学习{{subject}}</h3>
<select v-model.number="n">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button @click="increment">+</button>
<button @click="decrement">-</button>
<button @click="incrementOdd">当前求和为奇数再加</button>
<button @click="incrementWait">等一等再加</button>
</div>
</template>
<script>
//引入 映射状态
import {mapState,mapGetters} from 'vuex'
export default {
name:'Count',
data() {
return {
n:1, //用户选择的数字
}
},
computed:{
//靠 程序员自己 亲自 去写 计算属性
/* sum(){
return this.$store.state.sum
},
school(){
return this.$store.state.school
},
subject(){
return this.$store.state.subject
}, */
//规律: 上面3个都是从 this.$store.state.*** 取数据。
//借助 mapState 生成计算属性,从 state 中读取数据。(对象写法)
// ...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),
//利用 mapState 自动生成 this.$store.state 代码的函数。
//借助 mapState 生成计算属性,从 state 中读取数据。(数组写法) ★★★ mapState就是从state中读取数据。
//ES6 语法:
// ... 是一个对象
// 此处的意思,就会自动生成上面3个函数的内容,并放在这里。 函数名=后缀名(即:计算属性叫 啥,那么就从 this.$store.state 中读取 啥 )
//...mapState([sum:'sum',school:'school',subject:'subject']),
//注意: 此处并不是触发了对象的简写形式,因为 value 是字符串 ?
//数组写法: 1个sum 2种用途。 作为计算属性名 作为 .state中读取的名
// mapState(数组) 自动生成的 计算属性名 等于 从.state中读取的名。
...mapState(['sum','school','subject']),
/* ******************************************************************** */
/* bigSum(){
return this.$store.getters.bigSum
}, */
//借助 mapGetters 生成计算属性,从 getters 中读取数据。(对象写法)
// ...mapGetters({bigSum:'bigSum'})
//借助 mapGetters 生成计算属性,从 getters 中读取数据。(数组写法)
...mapGetters(['bigSum'])
},
methods: {
increment(){
this.$store.commit('JIA',this.n)
},
decrement(){
this.$store.commit('JIAN',this.n)
},
incrementOdd(){
this.$store.dispatch('jiaOdd',this.n)
},
incrementWait(){
this.$store.dispatch('jiaWait',this.n)
},
},
mounted() {
//key 是一个字符串, 一般把 'key' 两边的引号省略了。
const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
console.log(x)
},
}
</script>
<style lang="css">
button{
margin-left: 5px;
}
</style>
