Vue.js: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
Line 25: Line 25:


=== watcher in child ===
=== watcher in child ===
* 優點
** 只需要關注 child, 藕合度低可讀性高
* 缺點
* 缺點
** 如果對象是 property, 需要 immediate: true
** 如果對象是 property, 需要 immediate: true
** 如果對象是 property, oldVal 一定是 undefined, 無法取得上一個 tick 的值
** 如果對象是 property, oldVal 一定是 undefined, 無法取得上一個 tick 的值
** 如果對象是物件, 需要 deep: true, 但是效能會大幅下降
** 如果對象是物件, 需要 deep: true 才能有效偵測變更, 但是效能會大幅下降


<source lang="js">
<source lang="js">

Revision as of 08:53, 30 June 2021

Child 偵測 Parent 數值變化方法

computed in child

  • 缺點
    • 連動事件時, 當下的 computed 值還在未變更狀態, 只有原始值在已變更狀態
    • 連動事件時, 如果再次引用 computed 數值會發生 function loop
computed: {
  lifeCycleState () {
    this.onChangeState()
    return this.value
  }
}

methods: {
  onChangeState () {
    console.log(this.value)
  }
}

watcher in child

  • 優點
    • 只需要關注 child, 藕合度低可讀性高
  • 缺點
    • 如果對象是 property, 需要 immediate: true
    • 如果對象是 property, oldVal 一定是 undefined, 無法取得上一個 tick 的值
    • 如果對象是物件, 需要 deep: true 才能有效偵測變更, 但是效能會大幅下降
watcher: {
  value: {
    handler: (newVal, oldVal) {
      // ...
    },
    immediate: true,
    deep: true
  }
}

this.$refs.xxx in parent

  • 優點
    • 適用所有資料型態
    • 容易降低重複執行次數, 效能較高
  • 缺點
    • 如果在 parent 端引用次數太多, 會造成藕合度過高不易維護
    • 註解不充分時, 會難以追蹤事件流
    • 相關程式散落在 parent template, parent script, child script 可讀性稍差