vue的響應(yīng)式

數(shù)據(jù)響應(yīng)式:就是在數(shù)據(jù)變化時(shí)可以被檢測(cè)并對(duì)這種變化做出響應(yīng)的機(jī)制

vue中關(guān)于響應(yīng)式,主要需要了解MVVM模型
M:模型(Model):對(duì)應(yīng)data中的數(shù)據(jù)
V:視圖(view):模板
VM:視圖模型(ViewModel):Vue實(shí)例對(duì)象

在這個(gè)機(jī)制中要解決的一個(gè)核心問(wèn)題是連接數(shù)據(jù)層和視圖層,通過(guò)數(shù)據(jù)驅(qū)動(dòng)視圖,數(shù)據(jù)變化,視圖更新,要做到這點(diǎn)的就需要對(duì)數(shù)據(jù)做響應(yīng)式處理,這樣一旦數(shù)據(jù)發(fā)生變化就可以立即做出更新處理。

以vue為例說(shuō)明,通過(guò)數(shù)據(jù)響應(yīng)式加上虛擬DOM和patch算法,可以使我們只需要操作數(shù)據(jù),完全不用接觸繁瑣的dom操作,從而大大提升開(kāi)發(fā)效率,降低開(kāi)發(fā)難度。

響應(yīng)式的優(yōu)缺點(diǎn):

vue2中的數(shù)據(jù)響應(yīng)式會(huì)根據(jù)數(shù)據(jù)類型來(lái)做不同處理,如果是對(duì)象則采用Object.defineProperty()的方式定義數(shù)據(jù)攔截,當(dāng)數(shù)據(jù)被訪問(wèn)或發(fā)生變化時(shí),我們感知并作出響應(yīng);如果是數(shù)組則通過(guò)覆蓋該數(shù)組原型的方法,擴(kuò)展它的7個(gè)變異方法,使這些方法可以額外的做更新通知,從而作出響應(yīng)。這種機(jī)制很好的解決了數(shù)據(jù)響應(yīng)化的問(wèn)題,但在實(shí)際使用中也存在一些缺點(diǎn):比如初始化時(shí)的遞歸遍歷會(huì)造成性能損失;新增或刪除屬性時(shí)需要用戶使用Vue.set/delete這樣特殊的api才能生效;對(duì)于es6中新產(chǎn)生的Map、Set這些數(shù)據(jù)結(jié)構(gòu)不支持等問(wèn)題。

關(guān)于Object.defineProperty()方法:

Object.defineProperty()傳三個(gè)參數(shù)
Object.defineProperty(a,b,c)
a:要添加屬性的對(duì)象
b:要添加的屬性名
c:配置項(xiàng)
configurable:是否可刪除
(1)當(dāng)我們直接在一個(gè)對(duì)象上定義某個(gè)屬性時(shí),它的默認(rèn)值是true
(2)而當(dāng)我們通過(guò)屬性描述符進(jìn)行定義屬性時(shí),它的默認(rèn)值是false
enumerable:是否可枚舉,就是是否可遍歷
(1)當(dāng)我們直接在一個(gè)對(duì)象上定義某個(gè)屬性時(shí),他的默認(rèn)值是true
(2)而當(dāng)我們通過(guò)屬性描述符進(jìn)行定義屬性時(shí),他的默認(rèn)值是false
writable:是否可修改,他的默認(rèn)值是false
value:屬性值
get函數(shù)
獲取屬性時(shí)執(zhí)行的函數(shù),默認(rèn)為undefined
set函數(shù)
設(shè)置或者修改屬性值時(shí)執(zhí)行的函數(shù),默認(rèn)為undefined

數(shù)組變異方法:

在數(shù)組原型方法上進(jìn)行了部分更改,使其在保存原效果的同時(shí)新增的部分效果,用法保持不變
push():往數(shù)組最后面添加一個(gè)元素,成功返回當(dāng)前數(shù)組的長(zhǎng)度
pop():刪除數(shù)組的最后一個(gè)元素,成功返回刪除元素的值
shift():刪除數(shù)組的第一個(gè)元素,成功返回刪除元素的值
unshift():往數(shù)組最前面添加一個(gè)元素,成功返回當(dāng)前數(shù)組的長(zhǎng)度
splice():有三個(gè)參數(shù),第一個(gè)是想要?jiǎng)h除的元素的下標(biāo)(必選),第二個(gè)是想要?jiǎng)h除的個(gè)數(shù)(必選),第三個(gè)是刪除 后想要在原位置替換的值
sort():sort() 使數(shù)組按照字符編碼默認(rèn)從小到大排序,成功返回排序后的數(shù)組
reverse():reverse() 將數(shù)組倒序,成功返回倒序后的數(shù)組

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容