假設您有一個計算屬性,它根據用戶的輸入對一組值進行過濾和排序。
如果用戶開始從陣列中過濾值,并且在過濾的計算程序中排序值發生變化,那么計算屬性會繼續執行過濾,還是會跳轉到佇列中計算屬性的下一個計算,用新的排序值?
uj5u.com熱心網友回復:
Javascript(本質上)是單執行緒的。這意味著在當前執行的同步代碼完成執行之前,甚至無法處理用戶觸發事件發生的事實。
不過,您可以自己做一些事情來模仿這一點。在您釋放允許處理事件的運行回圈的地方添加異步暫停,然后恢復并檢查一些取消條件,然后您就可以實作您所要求的東西。但這是很多代碼,除非過濾真的很慢,否則這可能是一個壞主意。
uj5u.com熱心網友回復:
計算屬性將完全完成執行。
如果舊的 Vue.js v2 檔案仍然具有任何相關性,那么以下段落表明更改如何導致更新:
[...]Vue 異步執行 DOM 更新。每當觀察到資料更改時,它將打開一個佇列并緩沖在同一事件回圈中發生的所有資料更改。如果多次觸發同一個觀察者,它只會被推入佇列一次。這種緩沖重復資料洗掉對于避免不必要的計算和 DOM 操作很重要。然后,在下一個事件回圈“tick”中,Vue 重繪 佇列并執行實際(已經去重)的作業。
鑒于 JavaScript 是一種單執行緒語言,這意味著在事件回圈的任何特定“滴答”期間,在此“滴答”期間的代碼執行完成之前,不會處理其他操作。
如果假設 Vue 的內部行為是完全異步處理這些更新,那么任何兩個事件回圈滴答之間都可能存在競爭條件,特別是如果第一個滴答需要很長時間才能完成而第二個滴答很快完成。中途停止計算屬性的執行,即使可能,也可能導致通常由計算屬性的執行觸發的任何副作用(不好的做法,但這是另一個主題)不被觸發。
這些行為上的不一致會導致維護應用程式狀態一致性的各種問題,這是一個會使任何反應式框架有效地失去價值的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401286.html
標籤:javascript Vue.js 前端 反应式编程
上一篇:掛載腳本未在vuejs中加載
