reactive 和 ref 的解構 - daniel-qa/Vue GitHub Wiki

reactive 和 ref 的解構

reactive() 回傳的是一個 Proxy 物件,它只有在透過 Proxy 取值時,Vue 才能追蹤依賴。

所以 —— 一旦你解構了裡面的屬性,就等於脫離了 Vue 的代理機制,響應性就斷了!

  • 範例
import { reactive, watch } from 'vue'

const state = reactive({
  count: 0,
})

// 這樣是 reactive 的
watch(() => state.count, (val) => {
  console.log('count changed:', val)
})

// 解構會壞掉響應性
const { count } = state

watch(() => count, (val) => {
  console.log('這不會執行!count changed:', val)
})
  • 發生什麼事?

const { count } = state 這行是把 count 的值「靜態複製」出來,不再受 state 的 Proxy 控制。

所以後面的 watch 完全監聽不到 state.count 的變化。

但,如果又重新接到響應式物件( ref, reactive),則又會恢復自動更新顯示的功能。