在 Vue 中,watch
?函數用于觀察和響應 Vue 實例上的數據變動。然而,如果你在父組件中直接修改了數組或對象的內容(例如,通過索引直接設置一個項的值,或者使用?Array.prototype.push
?修改數組),Vue 可能無法檢測到這些變動。
這是因為 Vue 不能檢測到以下數組變動:
- 當你利用索引直接設置一個項時,例如:
vm.items[indexOfItem] = newValue
- 當你修改數組的長度時,例如:
vm.items.length = newLength
為了解決這個問題,你可以使用 Vue 提供的?set
?方法,或者使用能夠觸發數組更新的方法,如?splice
。如果你正在使用 Vue 3,你也可以使用?reactive
?方法來創建響應式對象。
此外,你也可以嘗試使用?watchEffect
?函數,它會立即執行傳入的函數,并響應式地追蹤其依賴,并在其依賴變化時重新運行。
在開發開發中我把數據使用reactive 聲明稱響應式,倒是在子組件watch還是監聽不到。就看了官網文檔,換成了
watchEffect
? 立即執行,watch是惰性的,由于我是Array類型,vue子組件watch檢測傳入值的變化。