HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專(zhuān)注品牌策劃15年

    vue是響應(yīng)式的嗎(vue響應(yīng)式原理是什么)

    發(fā)布時(shí)間:2023-04-26 17:40:22     稿源: 創(chuàng)意嶺    閱讀: 1229        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于vue是響應(yīng)式的嗎的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀企業(yè),服務(wù)客戶遍布全國(guó),相關(guān)業(yè)務(wù)請(qǐng)撥打175-8598-2043,或微信:1454722008c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    本文目錄:c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    vue是響應(yīng)式的嗎(vue響應(yīng)式原理是什么)

    一、vue2數(shù)據(jù)響應(yīng)式原理c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    vue2響應(yīng)式原理由 Observer 類(lèi), Dep 類(lèi)和 Watcher 類(lèi)互相調(diào)用實(shí)現(xiàn), Observer 類(lèi)是把一個(gè)普通的object類(lèi)變成每一層都能相應(yīng)的類(lèi), Dep 類(lèi)的作用是添加,移除,通知和收集訂閱者, Watcher 類(lèi)是訂閱者,主要功能是把當(dāng)數(shù)據(jù)改變的時(shí)候,去調(diào)用回調(diào)函數(shù),修改dom節(jié)點(diǎn)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    那么是怎么實(shí)現(xiàn)響應(yīng)式的呢,首先是一個(gè)函數(shù),要先轉(zhuǎn)換為可響應(yīng)的,那就需要用到 Observer 類(lèi)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    這個(gè) observe 函數(shù)就是對(duì) Observer 類(lèi)做多了一層封裝c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    而 Observer 類(lèi)是通過(guò) Object.defineProperty 來(lái)監(jiān)控?cái)?shù)據(jù)的獲取和改變的c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    關(guān)鍵在于 defineReactive 方法,這個(gè)方法是對(duì) Object.defineProperty 做了一層封裝,并且對(duì)對(duì)象的每一層做遞歸調(diào)用,實(shí)現(xiàn)了每一層都有響應(yīng)監(jiān)控c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    但是是怎么知道現(xiàn)在要保存哪一個(gè) Watcher 實(shí)例到訂閱者數(shù)組里面的呢?其實(shí)就是用了這個(gè) Dep.target , Dep.target 相當(dāng)于 window.target ,全局只有一個(gè),全局也能訪問(wèn)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    首先得先講一講 Watcher 類(lèi),我們先回到上面的index.js,對(duì)象要讓 Watcher 類(lèi)進(jìn)行監(jiān)聽(tīng),而 Watcher 有3個(gè)參數(shù),第一個(gè)是監(jiān)聽(tīng)的對(duì)象,第二個(gè)是監(jiān)聽(tīng)的屬性,比如 a.b.c.d ,第三個(gè)是屬性改變后觸發(fā)的回調(diào)函數(shù)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    先來(lái)講一下 parsePath ,這個(gè)在工具類(lèi)里,作用是訪問(wèn) a.b.c.d 這種鏈?zhǔn)綄傩?span style="display:none">c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    首先是觸發(fā)了 Watcher 的 get() 方法,把當(dāng)前實(shí)例保存在了 Dep.target 里面c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    然后在調(diào)用 parsePath 獲取屬性值的過(guò)程中,會(huì)挨個(gè)訪問(wèn)響應(yīng)對(duì)象的屬性,就會(huì)觸發(fā)相應(yīng)的 getter ,我們回到 defineReactive.js ,可以發(fā)現(xiàn)這時(shí)候相應(yīng)屬性的 getter 就會(huì)把 Dep.target 也就是相應(yīng)的 Watcher 的實(shí)例保存在了 Dep 類(lèi)的訂閱者數(shù)組里面c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    最后,在改變屬性的時(shí)候,相應(yīng)屬性的 setter 就會(huì)通知之前已經(jīng)保存的訂閱者數(shù)組,遍歷觸發(fā)回調(diào) c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    二、【手把手教你搓Vue響應(yīng)式原理】(一)初識(shí)Vue響應(yīng)式c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    在講這個(gè)之前,首先要明白一點(diǎn),這個(gè)所謂的響應(yīng)式,其實(shí)本身就是對(duì) MVVM 的理解。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    MVVM 其實(shí)就是所謂的 Modal View ViewModal 。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    簡(jiǎn)單理解,就是你的 data 中的數(shù)據(jù),和 template 模板中的界面,本身就是兩個(gè)東西。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    但是, Vue 給你做了一層中間的 ViewModal ,讓視圖上的改變能反映到 data 中, data 中的改變能反映到視圖上。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    在這個(gè)反映過(guò)程中,ViewModal就是視圖和數(shù)據(jù)的一個(gè)橋梁。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    同樣是讓 a + 1 。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    在 Vue 中,這個(gè)橋梁是你看不見(jiàn)的,因?yàn)? Vue 都幫你完成了視圖和數(shù)據(jù)的變化傳遞。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    而 React 就是侵入式的,因?yàn)橐@式地聲明 setState ,通過(guò)它,來(lái)設(shè)置變量的同時(shí),設(shè)置視圖的改變。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    所以,所謂的侵入式,其實(shí)就是對(duì)于橋梁的侵入。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    所以, Vue 的神奇之處就在于,不需要我們手動(dòng)地顯示調(diào)用 setState ,也就是這個(gè)橋梁, Vue 已經(jīng)幫我們橋接上了。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    要讓 data 改變的同時(shí),視圖也發(fā)生改變,所以,問(wèn)題的所在,就是我們需要監(jiān)聽(tīng),什么時(shí)候,這個(gè)變量發(fā)生了變量。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    然而, ES5 中,就有那么一個(gè)特性,可以做到對(duì)于數(shù)據(jù)的劫持(監(jiān)聽(tīng))。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    它就是 Object.defineProperty 。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    Object.defineProperty( obj, prop, descriptor ) 方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性,并返回此對(duì)象,與此同時(shí),它可以對(duì) 對(duì)象的一些額外底層的屬性進(jìn)行設(shè)置 。例如可以設(shè)置 writable , enumerable , configurable 等屬性。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    后面的額外屬性設(shè)置,才是我們使用它的重點(diǎn)。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    但是,我們使用的不是上面的幾個(gè)屬性,最主要的還是它的 get set ,可以對(duì)屬性值的獲取和設(shè)置操作進(jìn)行攔截。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    get主要是可以對(duì)值的獲取進(jìn)行攔截,,它必須要傳入一個(gè) return ,并且, 該函數(shù)的返回值會(huì)被用作屬性的值 。我們可以來(lái)看一個(gè)例子:c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    由于設(shè)置了 get ,所以,輸出 a.name 的時(shí)候直接會(huì)被攔截,走 get() 中的 return 所以,此時(shí), a.name 的值應(yīng)該是 你已經(jīng)被攔截了!。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    set主要是可以對(duì)值的設(shè)置進(jìn)行攔截,該方法會(huì)接受一個(gè)參數(shù),那就是 被賦予的新值 。我們可以來(lái)看一個(gè)例子:c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    由于設(shè)置了 set ,所以,設(shè)置值的時(shí)候會(huì)被攔截,走 set() 中的方法。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    所以, Vue 能自動(dòng)獲取data中的改變,反映到視圖的原因,就是有對(duì)于變量的獲取和設(shè)置的劫持,當(dāng)變量發(fā)生改變的同時(shí), Vue 能在第一時(shí)間知道,并且對(duì)視圖做出相應(yīng)的改變操作。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    而這把鑰匙就是 Object.defineProperty 。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    【尚硅谷】Vue源碼解析之?dāng)?shù)據(jù)響應(yīng)式原理 c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    Object.defineProperty() - MDN c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    三、vue數(shù)組響應(yīng)式原理c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    vue2中Object.defineProperty響應(yīng)式只對(duì)對(duì)象有效,對(duì)數(shù)組無(wú)效,所以對(duì)數(shù)組做額外處理。我們知道,會(huì)改變數(shù)組本身的方法只有7個(gè):sort, push, pop, slice, splice, shift, unshift,所以可以通過(guò)重寫(xiě)這些方法來(lái)達(dá)到數(shù)組響應(yīng)式c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    解決方案:c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1. 找到數(shù)組原型c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2. 覆蓋那些能夠修改數(shù)組的更新方法,讓他們?cè)谛薷臄?shù)組同時(shí),還可以通知更新c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    3. 將得到的新的原型設(shè)置到數(shù)組實(shí)例原型上c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    4. 對(duì)數(shù)組內(nèi)部元素實(shí)現(xiàn)響應(yīng)式c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    // 實(shí)現(xiàn)數(shù)組響應(yīng)式// 1. 替換數(shù)組原型中7個(gè)方法constoriginalProto=Array.prototype// 克隆體原數(shù)組原型constarrayProto=Object.create(originalProto)// 可修改數(shù)組的7個(gè)方法 , 'sort'constchangeMethods=['push','pop','shift','unshift','slice','splice','sort']//  2. 在克隆的原型上,覆蓋那些能夠修改數(shù)組的更新方法,讓他們?cè)谛薷臄?shù)組同時(shí),還可以通知更新changeMethods.forEach(method=>{arrayProto[method]=function(){// 進(jìn)行原始操作originalProto[method].apply(this,arguments)// 覆蓋操作:增加更新通知console.log(`數(shù)組正在執(zhí)行${method}方法`);}})// 對(duì)象響應(yīng)化functiondefineReactive(obj,key,value){Object.defineProperty(obj,key,{get(){console.log('獲取'+key);returnvalue},set(newVal){if(newVal!==value){// console.log(newVal);// console.log(JSON.stringify(obj[key]));console.log(`正在改變${key}值:從${obj[key]}變?yōu)?{newVal}`)value=newVal}}})}functionobserver(obj){// 不是對(duì)象或者為null,不做響應(yīng)式,結(jié)束if(typeofobj!=='object'||obj===null)return;// 如果是數(shù)組,修改其實(shí)例的原型if(Array.isArray(obj)){// 3. 將得到的新的原型設(shè)置到數(shù)組實(shí)例原型上obj.__proto__=arrayProto// 4. 對(duì)數(shù)組內(nèi)的元素,同樣進(jìn)行響應(yīng)化for(leti=0;i<obj.length;i++){// console.log(obj[i]);observer(obj[i])}// 如果是對(duì)象}else{Object.keys(obj).forEach(key=>{console.log(obj,key,obj[key]);defineReactive(obj,key,obj[key])})}}obj=[{a:1},2,7,5,3]observer(obj)obj.push(4)// 數(shù)組正在執(zhí)行push方法obj.pop()// 數(shù)組正在執(zhí)行pop方法obj[0].a=2// 獲取a    // 正在改變a值:從1變?yōu)?obj.sort()// 數(shù)組正在執(zhí)行sort方法console.log(obj);// [ 2, 3, 5, 7, { a: [Getter/Setter] } ]console.log(obj[4].a);// 獲取a  // 2c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    鏈接:https://www.jianshu.com/p/886ac356c13d c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    四、vue2響應(yīng)式原理總結(jié)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    vue組件實(shí)例化時(shí),會(huì)對(duì)data屬性深度遍歷(遇到數(shù)組或者對(duì)象)為每一個(gè)屬性添加數(shù)據(jù)劫持。數(shù)據(jù)劫持就是使用Object.defineProperty(de fai in pro pu tei)方法添加get/set方法。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    在這個(gè)過(guò)程中會(huì)實(shí)例化一個(gè)Dep類(lèi)。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1.在get攔截器里觸發(fā)dep實(shí)例的depend方法,進(jìn)行依賴(lài)收集,實(shí)質(zhì)是在dep的實(shí)例屬性sub數(shù)組中添加依賴(lài)這個(gè)屬性的watcher實(shí)例。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2.在set攔截器里觸發(fā)dep實(shí)例的notify方法,對(duì)收集到的所有依賴(lài)派發(fā)更新,(watcher的update方法)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    vue組件實(shí)例化時(shí)會(huì)實(shí)例化一個(gè)渲染watcher,渲染watcher實(shí)例化過(guò)程會(huì)做兩件事情。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1.創(chuàng)建vnode,在這個(gè)過(guò)程中,訪問(wèn)了data屬性,觸發(fā)了get方法,完成了依賴(lài)收集。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2.觸發(fā)了子組件的實(shí)例化,子組件實(shí)例化又會(huì)重復(fù)上述數(shù)據(jù)劫持的過(guò)程。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    這個(gè)過(guò)程就是對(duì)組件樹(shù)的深度遍歷。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    結(jié)合組件生命周期來(lái)看整個(gè)過(guò)程,父組件會(huì)先觸發(fā)created鉤子,子組件后觸發(fā)created鉤子。而子組件mouted鉤子會(huì)先執(zhí)行,父組件的mouted鉤子后執(zhí)行。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    分步驟記憶c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1、實(shí)現(xiàn)頁(yè)面不刷新的原理c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2、頁(yè)面視圖刷新的原理c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    實(shí)現(xiàn)頁(yè)面不刷新 c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1.hashc0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2.historyc0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    3.abstract:支持所有 JavaScript 運(yùn)行環(huán)境,如 Node.js 服務(wù)器端。如果發(fā)現(xiàn)沒(méi)有瀏覽器的 API,路由會(huì)自動(dòng)強(qiáng)制進(jìn)入這個(gè)模式。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1.hash(哈希模式),#符號(hào)后邊是瀏覽器行為,在改變的時(shí)候不對(duì)頁(yè)面進(jìn)行刷新(重新請(qǐng)求URL)(監(jiān)聽(tīng)hashChange事件)c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2.history模式,H5新增了pushState,replaceState連個(gè)新API,可以修改歷史記錄卻不會(huì)使瀏覽器刷新頁(yè)面。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    視圖更新原理 c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    其原理就是vue的響應(yīng)式更新dom的原理,m => vc0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    m是數(shù)據(jù),也就是在vue-router install時(shí)在根組件(root vue component)添加了_route屬性,在匹配到對(duì)應(yīng)路由后更新了_route屬性值,繼而觸發(fā)了該屬性值的渲染watcher,在繼而觸發(fā)dom更新。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    兩種模式的不同 c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    1.部署時(shí),history模式需要服務(wù)端處理所有可能的路徑(例如配置nginx的配置文件),防止出現(xiàn)404。哈希模式則不需要。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    2.URL表示不同。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    v-model指令就是 v-bind:value 和 @input 的語(yǔ)法糖。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    它即可以支持原生表單元素,也可以支持自定義組件c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    在自定義組件中其實(shí)際是這樣的:c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    它的實(shí)現(xiàn)通過(guò)自定義render函數(shù), 緩存了 vnodec0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    Vue 在更新 DOM 時(shí)是異步執(zhí)行的,只要偵聽(tīng)到數(shù)據(jù)變化,Vue 將開(kāi)啟一個(gè)隊(duì)列,并緩沖在同一事件循環(huán)中發(fā)生的所有數(shù)據(jù)變更。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    如果同一個(gè) watcher 被多次觸發(fā),只會(huì)被推入到隊(duì)列中一次。在緩沖時(shí)會(huì)去除重復(fù)數(shù)據(jù)避免不必要的計(jì)算和 DOM 操作。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    $nextTick(cb) 目的是在DOM 更新完成后傳入的回調(diào)函數(shù)再被調(diào)用。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司

    以上就是關(guān)于vue是響應(yīng)式的嗎相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢(xún),客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。c0t創(chuàng)意嶺 - 安心托付、值得信賴(lài)的品牌設(shè)計(jì)、營(yíng)銷(xiāo)策劃公司


    推薦閱讀:

    vue畫(huà)心電圖(canvas畫(huà)心電圖)

    免費(fèi)的虛擬主播軟件(vup)

    怎樣制作TVU盤(pán)(我告訴你怎么制作u盤(pán))

    短視頻搬運(yùn)app(短視頻搬運(yùn)app都有哪些)

    旅游區(qū)景觀設(shè)計(jì)(旅游區(qū)景觀設(shè)計(jì)原理pdf)