Vue.js技术栈 容易出错的地方

429 阅读1分钟

1、computed、props中的vuex值在data中不更新

computed: {
  ...mapGetters([
    'intepriv'
  ])
},

data() {
  const query = this.$route.query
    return {
      isIntepriv: this.intepriv
    }
}

假设intepriv的初始值为false,此处的isIntepriv永远为false. props中的值用computed即可动态更新

2、组件复用

有时候我们的组件需要复用,并且我们希望组建重新渲染,此时我们需要加key

<bill key="a"></bill>
<bill key="b"></bill>

3、同时监听多个值的变化

使用场景:比如我们需要等公司companyOpts、应用appOpts、广告位adPositionOpts等都加载完成再去调用api,常用语下拉选项

例:这里我们监听tableData和appOpts的变化,并且当2个值都有数据再去执行逻辑

// 监听app有值并且table有数据
computed: {
  opts() {
    return {
      companyOpts: $store.getters.companyOpts,
      appOpts: this.$store.getters.appOpts,
      adPositionOpts: this.adPositionOpts
    }
  }
},
watch: {
  opts(o) {
    if (o.companyOpts.length && o.appOpts.length && o.adPositionOpts.length) {
        // 逻辑
    } 
  }
}

4、地址栏传参数字转字符串的问题

这里跳转到editposition页之后,第一次获取的new_created为number类型,刷新页面后new_created为string类型

this.$router.push({
    name:'editposition',
    query: { pkg_name: data.name, new_created: 1 }
})

5、Vue 不能检测以下数组的变动

  • 当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
  • 当你修改数组的长度时,例如:vm.items.length = newLength
  • 参考官网