常常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确仍是拿不到,这是多么痛苦而又使人忍不住抓耳挠腮,捶胸顿足啊vue
data() { return { option: { chart: '' //echarts的实例 } } }, //钩子函数 mounted() { this.chart = echarts.init(this.$refs.charts) // 使用vue提供得ref来获取dom this.chart.setOption(this.option) // 初始化数据 }, computed: { ...mapState({ option(state) { const state = state.state.option //this.chart.setOption(state) return state } }) }, watch: { this.option(oldVal, newVla) { this.chart.setOption(state) } }
computed
中调用setOption
时,会有两次显示,第一次没有数据,于是会报错,第二次才有数据,给人的感受是, computed
比mounted
先执行,并且是执行屡次,于是致使报错,思来想去,最后在watch
中调用时才得以解决sessionStorage
中获取,当时这个数据是本地的,于是会现出来,可是要求是后出来,放在watch
中解决,虽然watch
是监听路由,数据,可是也能够做为数据前后展现的重要函数
computed
: 假设用来获取vuex
中的数据vue-router
computed: { ...mapState({ //假设的值 timeList(state) { return state.timeList } }) }
如果想直接使用
timeList
能够在template
模板中调用,可是如果没有使用,须要查看timeList
的值,能够在watch
中,进行监听便可。以前一直存在误区,觉得必须在watch
中进行监听,才能够拿到值,如今想一想彻底没有必要,除非进行业务逻辑处理而已vuex
在上面的问题,提到
computed
会执行两次,而第一次是没有数据的,须要额外进行处理。今天用一种简单的方式便可解决session
computed: { ...mapState({ //假设的值 timeList(state) { const timeList = state.timeList if (timeList.length == 0) return //业务逻辑处理 return state.timeList 空 } }) }
简单地进行判断便可,如果空,直接跳出函数echarts
computed
在使用时,必定要注意,函数里面的变量都会被监听,只要里面的某一个值变更,便会将整个函数执行一遍,这样会有不少坑在里面,于是考虑如何不在里面使用watch
只是监听某一个值,如果监听的值里面也有不少变量,也会所有监听