我是否需要检查观察者中新旧值之间的不平等



目前,我的很多观察程序代码看起来像这样:

watch: {
  // whenever question changes, this function will run
  question: function (newQuestion, oldQuestion) {
    if (newQuestion != oldQuestion) {
       // do something
    }
  }
},

我的问题是我是否需要newQuestion != oldQuestion或者如果 Vue newQuestion = oldQuestion,Vue 不会触发观察者。如果后者是正确的,那么 Vue 会检查什么样的不平等?只是=或深度相等(例如,即使数组不同,也要检查数组的元素是否相同)?

为了回答您的问题,如果它们相等,观察程序不会触发。要检查深度相等,您可以像这样构建观察器(仅在处理非标量时需要)。

question: {
   handler: () => {},
   deep: true
}

希望有帮助。

自己尝试一下:

new Vue({
  el:"#app",
  data:_=>({x:"", log:""}),
  watch:{
    x(nw,od){
      this.log += `<hr/>old: ${od} new: ${nw} x: ${this.x}`
    }
  }
})
<script src="https://unpkg.com/vue@2.5.21/dist/vue.js"></script>
<div id="app">
  <input v-model="x"/>
  <div v-html="log"></div> 
</div>

最新更新