今天使用Vuex的时候遇到一个坑,也可以说是自己的无知吧,折腾了好久,终于发现自己代码的错误了。真是天雷滚滚~~~~~~
index.js
import Vue from ‘vue‘ import Vuex from ‘vuex‘ import mutations from ‘./mutations‘ import actions from ‘./action‘ import getters from ‘./getters‘ Vue.use(Vuex) const state = { userInfo: { phone: 111 }, //用户信息 orderList: [{ orderno: ‘1111‘ }], //订单列表 orderDetail: null, //订单产品详情 login: false, //是否登录 } export default new Vuex.Store({ state, getters, actions, mutations, })
computed: { ...mapState([ ‘orderList‘, ‘login‘ ]), }, mounted(){ console.log(typeof orderList); ==>undefind console.log(typeof this.orderList)==>object }
mapState通过扩展运算符将store.state.orderList 映射this.orderList 这个this 很重要,这个映射直接映射到当前Vue的this对象上。
所以通过this都能将这些对象点出来,同理,mapActions, mapMutations都是一样的道理。牢记~~~
demo
<script> import { mapState, mapActions } from ‘vuex‘ export default { name: ‘itemcontainer‘, data() { return { itemId: null, //题目ID choosedNum: null, //选中答案索引 choosedId:null //选中答案id } }, props:[‘fatherComponent‘], computed: mapState([ ‘itemNum‘, //第几题 ‘level‘, //第几周 ‘itemDetail‘, //题目详情 ‘timer‘, //计时器 ]), methods: { ...mapActions([ ‘addNum‘, ‘initializeData‘, ]), //点击下一题 nextItem(){ if (this.choosedNum !== null) { this.choosedNum = null; //保存答案, 题目索引加一,跳到下一题 this.addNum(this.choosedId) }else{ alert(‘您还没有选择答案哦‘) } }, //索引0-3对应答案A-B chooseType: type => { switch(type){ case 0: return ‘A‘; case 1: return ‘B‘; case 2: return ‘C‘; case 3: return ‘D‘; } }, //选中的答案信息 choosed(type,id){ this.choosedNum = type; this.choosedId = id; }, //到达最后一题,交卷,请空定时器,跳转分数页面 submitAnswer(){ if (this.choosedNum !== null) { this.addNum(this.choosedId) clearInterval(this.timer) this.$router.push(‘score‘) }else{ alert(‘您还没有选择答案哦‘) } }, }, created(){ //初始化信息 this.initializeData(); document.body.style.backgroundImage = ‘url(./static/img/1-1.jpg)‘; } } </script>