最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?如何關(guān)掉響應(yīng)式問(wèn)題

 更新時(shí)間:2022年09月24日 09:33:56   作者:河北小寶  
這篇文章主要介紹了Vue?如何關(guān)掉響應(yīng)式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Vue如何關(guān)掉響應(yīng)式

大家都知道Vue有雙向數(shù)據(jù)綁定 ,但是很少人知道怎樣把它這個(gè)功能關(guān)掉

比如想要讓某個(gè)值的改變不改變?cè)兄?/p>

使用 Object.freeze(),這會(huì)阻止修改現(xiàn)有的 property,也意味著響應(yīng)系統(tǒng)無(wú)法再追蹤變化。

例子

var obj = {
? foo: 'bar'
}

Object.freeze(obj)

new Vue({
? el: '#app',
? data: obj
})
<div id="app">
? <p>{{ foo }}</p>
? <!-- 這里的 `foo` 不會(huì)更新! -->
? <button v-on:click="foo = 'baz'">Change it</button>
</div>

額外 Vue 也為大家提供了一個(gè) 只能修改數(shù)據(jù)一次的方法

v-once

通過(guò)使用 v-once 指令,你也能執(zhí)行一次性地插值,當(dāng)數(shù)據(jù)改變時(shí),插值處的內(nèi)容不會(huì)更新。但請(qǐng)留心這會(huì)影響到該節(jié)點(diǎn)上的其它數(shù)據(jù)綁定:

<span v-once>這個(gè)將不會(huì)改變: {{ msg }}</span>

Vue響應(yīng)式的處理過(guò)程

響應(yīng)式是從vue實(shí)例的init方法開始的。

在Init方法中先調(diào)用initState()初始化vue實(shí)例的狀態(tài),在這個(gè)方法中調(diào)用了initData(),initData()是把我們的data屬性注入到vue實(shí)例上,并且調(diào)用observe()把data對(duì)象轉(zhuǎn)換成響應(yīng)式對(duì)象。于是observe()就是我們響應(yīng)式的入口。

observe()做了什么事情:observe接收一個(gè)參數(shù)value,這個(gè)參數(shù)value就是我們響應(yīng)式要處理的對(duì)象。

那么在創(chuàng)建observe對(duì)象時(shí)做了什么事:來(lái)看他的構(gòu)造函數(shù)

數(shù)組的響應(yīng)式處理:其實(shí)就是設(shè)置數(shù)組的那幾個(gè)特殊方法,比如push,pop,sort等等,這些方法會(huì)改變?cè)瓟?shù)組,所以當(dāng)這些方法被調(diào)用的時(shí)候,我們要去發(fā)送通知。發(fā)送通知的時(shí)候是找到數(shù)組對(duì)象對(duì)應(yīng)的ob,也就是observe對(duì)象,在找到這個(gè)observe中的dep,調(diào)用dep的notify方法。更改完數(shù)組的特殊方法之后,遍歷數(shù)組的每一個(gè)成員,對(duì)每一個(gè)成員再去調(diào)用observe,如果這個(gè)成員是對(duì)象的話,也會(huì)把這個(gè)對(duì)象轉(zhuǎn)換成響應(yīng)式對(duì)象。

對(duì)象的響應(yīng)式處理:如果當(dāng)前的value是對(duì)象的話,此時(shí)會(huì)調(diào)用walk()方法。Walk方法里面會(huì)遍歷這個(gè)對(duì)象的所有屬性,對(duì)每一個(gè)屬性調(diào)用defineReactive()。

在defineReactive中,會(huì)為每一個(gè)屬性創(chuàng)建dep對(duì)象,讓dep去收集依賴。如果當(dāng)前屬性的值是對(duì)象,則會(huì)調(diào)用observe,把這個(gè)對(duì)象也轉(zhuǎn)換成響應(yīng)式對(duì)象。

在defineReactive里最核心的事情就是定義getter和setter。

在getter中去收集依賴,收集依賴時(shí)要為每一個(gè)屬性收集依賴,如果這個(gè)屬性的值是對(duì)象,他也要為這個(gè)子對(duì)象收集依賴,在getter中最終返回這個(gè)屬性的值。

在setter中首先要把新的值保存下來(lái),如果新的值是對(duì)象,就調(diào)用observe,把我們新設(shè)置的值也轉(zhuǎn)換成響應(yīng)式對(duì)象。在setter中,數(shù)據(jù)發(fā)生了變化,所以要發(fā)送通知,其實(shí)就是調(diào)用dep.notify()。

收集依賴的過(guò)程:

在收集依賴時(shí),首先要調(diào)用watcher對(duì)象的get方法,在get方法中調(diào)用pushTarget,在pushTarget中會(huì)把當(dāng)前的watcher對(duì)象記錄到Dep.target屬性中。

在訪問(wèn)data中成員的時(shí)候去收集依賴,當(dāng)我們?cè)L問(wèn)這個(gè)屬性的值的時(shí)候,就會(huì)去觸發(fā)defineReactive中的getter,在getter中去收集依賴。他會(huì)把我們屬性對(duì)應(yīng)的watcher對(duì)象添加到dep的subs數(shù)組中,也就是為屬性收集依賴。如果這個(gè)屬性的值也是對(duì)象,此時(shí)要?jiǎng)?chuàng)建一個(gè)childOb對(duì)象,要為我們這個(gè)子對(duì)象收集依賴。目的是將來(lái)子對(duì)象發(fā)生變化時(shí)可以發(fā)送通知。(其實(shí)數(shù)組中內(nèi)容發(fā)生變化時(shí),就用到了這個(gè)childOb)。

Wacher:當(dāng)數(shù)據(jù)發(fā)生變化時(shí),會(huì)調(diào)用dep.notify()發(fā)送通知,他會(huì)調(diào)用wacher的update方法,在wacher的update方法中,會(huì)去調(diào)用queueWatcher函數(shù)去判斷wacher是否被處理了,如果這個(gè)wacher對(duì)象沒(méi)有被處理,則會(huì)被添加到queue隊(duì)列中,并且調(diào)用flushSchedulerQueue去刷新任務(wù)隊(duì)列。

在flushSchedulerQueue函數(shù)中會(huì)觸發(fā)beforeUpdate鉤子函數(shù),然后調(diào)用wacher.run()方法,在wacher.run方法中去調(diào)用wacher的get方法去調(diào)用getter方法,而getter中存儲(chǔ)的其實(shí)就是updateComponent(此處針對(duì)渲染wacher來(lái)說(shuō)的)。在wacher.run運(yùn)行完成后就已經(jīng)將數(shù)據(jù)更新到了視圖上,我們就可以再頁(yè)面上看見(jiàn)變化了,剩下一些清理工作。

他會(huì)去清空我們上一次的依賴,重置wacher中的狀態(tài),接下來(lái)去觸發(fā)actived鉤子函數(shù),最后觸發(fā)updated鉤子函數(shù)。

這就是整個(gè)響應(yīng)式的處理過(guò)程。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • VUE使用docxtemplater導(dǎo)出word文檔實(shí)例(帶圖片)

    VUE使用docxtemplater導(dǎo)出word文檔實(shí)例(帶圖片)

    docxtemplate支持的功能很多,語(yǔ)法包含變量替換、條件判斷、循環(huán)、列表循環(huán)、表格循環(huán)等,下面這篇文章主要給大家介紹了關(guān)于VUE使用docxtemplater導(dǎo)出word功能(帶圖片)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Vue2.0使用嵌套路由實(shí)現(xiàn)頁(yè)面內(nèi)容切換/公用一級(jí)菜單控制頁(yè)面內(nèi)容切換(推薦)

    Vue2.0使用嵌套路由實(shí)現(xiàn)頁(yè)面內(nèi)容切換/公用一級(jí)菜單控制頁(yè)面內(nèi)容切換(推薦)

    這篇文章主要介紹了Vue2.0使用嵌套路由實(shí)現(xiàn)頁(yè)面內(nèi)容切換/公用一級(jí)菜單控制頁(yè)面內(nèi)容切換,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 一次vue項(xiàng)目?jī)?yōu)化的實(shí)際操作記錄

    一次vue項(xiàng)目?jī)?yōu)化的實(shí)際操作記錄

    用vue開發(fā)項(xiàng)目上線以后,發(fā)現(xiàn)首頁(yè)加載速度非常慢,如果項(xiàng)目比較大,甚至可能出現(xiàn)10s以上的等待,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目?jī)?yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue使用qrcode生成二維碼的方法

    vue使用qrcode生成二維碼的方法

    這篇文章給大家介紹了vue使用qrcode生成二維碼的方法,在Vue中實(shí)現(xiàn)二維碼生成需要使用第三方庫(kù)來(lái)處理生成二維碼的邏輯,常用的庫(kù)有qrcode和vue-qrcode,所以接下來(lái)小編將給大家介紹vue?qrcode生成二維碼的方法示例,需要的朋友可以參考下
    2024-01-01
  • vue使用driver.js完成頁(yè)面引導(dǎo)功能的示例詳解

    vue使用driver.js完成頁(yè)面引導(dǎo)功能的示例詳解

    在Vue中,driver.js通常是指用于實(shí)現(xiàn)用戶引導(dǎo)和教程功能的JavaScript庫(kù),它可以幫助開發(fā)者在應(yīng)用程序中創(chuàng)建交互式的引導(dǎo)和教程,以引導(dǎo)用戶了解應(yīng)用程序的不同功能和界面,本文就簡(jiǎn)單的給大家介紹一下vue如何使用driver.js完成頁(yè)面引導(dǎo)功能
    2023-08-08
  • vite打包靜態(tài)文件打開顯示空白的解決

    vite打包靜態(tài)文件打開顯示空白的解決

    本文主要介紹了vite打包靜態(tài)文件打開顯示空白的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 記一次vue去除#問(wèn)題處理經(jīng)過(guò)小結(jié)

    記一次vue去除#問(wèn)題處理經(jīng)過(guò)小結(jié)

    這篇文章主要介紹了vue去除#問(wèn)題處理經(jīng)過(guò),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • VUE實(shí)現(xiàn)分布式醫(yī)療掛號(hào)系統(tǒng)預(yù)約掛號(hào)首頁(yè)步驟詳情

    VUE實(shí)現(xiàn)分布式醫(yī)療掛號(hào)系統(tǒng)預(yù)約掛號(hào)首頁(yè)步驟詳情

    這篇文章主要為大家介紹了VUE實(shí)現(xiàn)分布式醫(yī)療掛號(hào)系統(tǒng)預(yù)約掛號(hào)首頁(yè)步驟詳情,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Vue繪制雙Y軸折線柱狀圖

    Vue繪制雙Y軸折線柱狀圖

    這篇文章主要介紹了Vue繪制雙Y軸折線柱狀圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue路由跳轉(zhuǎn)傳參數(shù)的方法

    vue路由跳轉(zhuǎn)傳參數(shù)的方法

    這篇文章主要介紹了vue路由跳轉(zhuǎn)傳參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論

洛宁县| 社会| 阿坝县| 湖南省| 齐齐哈尔市| 建湖县| 滨州市| 新绛县| 宿州市| 德清县| 龙南县| 定日县| 无锡市| 内丘县| 富蕴县| 克什克腾旗| 龙海市| 旌德县| 乌兰察布市| 天台县| 沁水县| 无锡市| 饶阳县| 镇康县| 库车县| 黔东| 新晃| 特克斯县| 聂拉木县| 商水县| 成武县| 太保市| 祁连县| 吐鲁番市| 邓州市| 彰化市| 张掖市| 云龙县| 云浮市| 芦溪县| 静海县|