日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

一个简单的Vue框架是怎么运转起来的?

發布時間:2023/12/31 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 一个简单的Vue框架是怎么运转起来的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:手把手教你從零寫一個簡單的 VUE

今天給大家帶來的是實現一個簡單的類似 VUE 一樣的前端框架,VUE 框架現在應該算是非常主流的前端數據驅動框架,今天我們來從零開始寫一個非常簡單的 VUE 框架,主要是讓大家知道最核心的 vue 部分是怎么運轉起來的。包括數據綁定,模板處理,以及頁面渲染,數據驅動視圖等幾個部分,代碼在文章末尾給出來,下面我們開始~

VUE 是怎么運轉起來的

在正式動手之前,我們先來了解下 vue 是怎么運轉起來的,vue 從核心來說,是一個通過數據去驅動頁面渲染的框架,也就是說通過改變數據的狀態,可以控制頁面中渲染的邏輯,比如展示數據,切換樣式,這些的核心都是通過對數據改變的監聽,從而將數據發生改變的對應的視圖進行更新渲染,這是整個框架的核心運行機制。因此我們制作的簡單 vue 框架,主要是圍繞著怎么監聽,怎么渲染,怎么更新這個流程去做的,旨在讓大家知道 vue 怎么跑起來的,其余的 vue 組件,指令,插件等內容將在后面的文章中寫出。

設計

首先我們要知道我們要做一個簡單數據驅動視圖前端框架,它包括以下幾個部分:

  1. 能夠編譯簡單的模板
  2. 能夠監聽數據變化
  3. 數據變化的時候,能夠關聯對應的視圖并同步的更新視圖

根據上面列舉的需求,我們需要程序抽象以下幾個部分:

  1. 存儲數據的$data,用于保存數據,渲染視圖
  2. 與每個模板對應的Node對象,對象包含對應模板的渲染函數,還有渲染函數需要使用的數據集合
  3. 對數據進行監聽關聯的Watcher類,用于關聯數據和對應的模板,監聽數據變化

開始編碼

首先介紹下項目用的工具及框架,項目使用rollup進行項目模塊化構建,使用ES6進行編碼。下面開始正式編碼。
首先我給框架起了個簡單的名字,叫QV,這個對象會暴露到全局中,進行實例化,實例化代碼如下:

在實例化的時候傳給了對象 el、templatedata等數據,其中el是模板在頁面的掛載點,template 是獲取模板的選擇器,分別對應body<app></app>標簽和script標簽中的模板,data 是定義的數據對象。

數據處理

QV類的構造函數中,我們會對傳入的配置進行處理,首先我們會對數據進行格式化,使得其在被Watcher正常監控。格式化數據的代碼如下:

可以看到formatData方法在原來的data上面又掛載了一個_od_屬性,然后將原始數據進行格式化,每個數據分別包含value(數據值),linkNodes(被使用的節點值),mounted(是否已經被格式化過),通過對數據進行預處理,方便后面的數據監控綁定

模板節點處理

模板的能力是一個前端框架的重要組成部分,vue將模板轉化為AST(抽象語法樹),然后去解析其中的語法,比如{{}}、v-for v-if等等,模板解析的總體思路如下:

  1. 將模板字符串通過正則表達式等方法進行切割,切割點為模板定義的關鍵字
  2. 將切割完的字符串進行分析,可以生成AST(抽象語法樹)或者是直接進行處理操作
  3. 將分析完的東西進行字符串拼接,通過new Function生成模板函數

本例子只做流程的說明,所以模板很簡單,只有賦值語法,如下:

可以看到模板中只有{{}}的賦值語法,插入變量為a、sdf、ccc的語法
那么這個是怎么進行解析的呢,代碼如下:

下面重點講一講這個函數,可以看到函數的開頭定義了一個正則表達式 /{{[ t]*([wW]*?)[ t]*}}/g,用于匹配和分割用{{}}界定的變量,通過 exec的運行,匹配出來的結果如下:

可以看到a,sdf,ccc都被匹配出來了,然后通過slice進行分割后重建,變成一段模板函數字符串,如下:

然后再通過new Function將上面的字符串變成一個函數,方法如下

其中的new Function("od",$t)中的od是這個函數的參數,可以在函數中使用
最后生成的模板函數如下:

這樣子就完成了模板函數的開發,而且還將模板用的變量進行抽取,標記這個模板用到了哪些變量

監聽器

監聽器作為連接數據和視圖更新的紐帶,是vue的核心部分,vue是使用Object.defineProperty對數據進行處理后實現數據監聽的,本程序也是使用這個核心方法進行數據監聽的,核心代碼如下:

下面我具體說下這段代碼:
之前格式化數據的時候在原始數據里面添加了_od_字段,是用在數據監控時候的,Object.defineProperty可以設置get set屬性,分別在對應的數據被獲取或者被修改的時候會進行回調,因此如果直接操作原始數據,會導致監控程序發生死循環,因此通過_od_的拷貝數據進行操作,能夠避免這種情況,可以看到get函數會直接返回_od_里面對應屬性的value,而set函數我做了一個優化節流,對于連續修改數據只發生一次更新,將使用到這個數據的Node對象進行update操作

程序最核心的方法已經開發完成了,演示下結果,直接打開頁面,可以看到下面的視圖

可以看到程序將數據a sdf ccc賦值給模板,然后替換頁面的app節點,渲染到頁面上
接下來我們通過實例直接修改data,
qv.$data.a = "change data a"
可以看到頁面會更新成為

下面說下重新渲染的流程:

  1. 數據修改之后觸發了Object.definePropertyset方法,方法檢測到設置數據與原數據不同,回去獲取linkNodes屬性,里面包含了使用這個數據的Node節點,然后分別調用Node節點的update方法
  2. update方法被調用之后,Node會重新獲取data去生成dom元素,然后替換現有的模板元素,至此完成一次更新

結語

這篇文章的例子旨在跟大家說明Vue是怎么運作的,希望可以幫助到大家在日常使用的時候遇到一些坑,可以從根本原理上面去找原因,當然這個demo 離Vue還是非常不完整的,缺少了各種模板語法,指令,事件綁定,組件系統,只是把核心的流程展現出來,希望大家喜歡

最后附上源碼 點我點我,喜歡的話給個 star 唄~~

總結

以上是生活随笔為你收集整理的一个简单的Vue框架是怎么运转起来的?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美中文日韩 | 18被视频免费观看视频 | 欧美一级影院 | 高清乱码免费看污 | 淫片一级国产 | 图片区小说区视频区 | 国产片91| 亚洲专区一区二区三区 | 麻豆影视在线观看 | 欧美群交射精内射颜射潮喷 | 精产国品一二三区 | 一本色道久久88综合日韩精品 | 最新国产视频 | 国产美女喷水视频 | 深夜福利一区二区三区 | 日本韩国在线 | 徐锦江一级淫片免费看 | 欧美图片一区二区 | 中文字幕 视频一区 | 三级艳丽杨钰莹三级 | 亚洲成人黄色网 | 精品一区二区国产 | 99久99| 国产无遮挡又黄又爽免费网站 | 婷婷国产 | 老熟妇一区二区三区啪啪 | 亚洲天堂国产精品 | 亚洲aⅴ| 亚洲av午夜精品一区二区三区 | 亚洲人体在线 | 片黄在线观看 | 国产在线精品一区二区 | 男人激情网| 免费涩涩视频 | 欧美激情视频网 | 波多av在线 | 国产精品福利一区 | 欧美日韩国产在线播放 | 91微拍| 久热精品视频在线观看 | 日韩欧美福利视频 | 丰满女人又爽又紧又丰满 | 国产高清免费在线 | 精品不卡一区 | 992tv在线成人免费观看 | 天堂av一区二区三区 | 日一区二区三区 | 青草成人免费视频 | 一级二级三级视频 | 国产a∨精品一区二区三区仙踪林 | 一级片免费观看视频 | www.av.cn| 十大黄台在线观看 | 91成人在线观看喷潮蘑菇 | 亚洲AV成人无码一二三区在线 | 中文字幕一区二区三区门四区五区 | 50度灰在线 | 国产三级在线观看视频 | 超碰在线中文字幕 | 日韩精品视频在线观看免费 | 91精品国产自产91精品 | 一区亚洲 | 97成人资源站 | www.日韩欧美 | 久久99精品国产麻豆91樱花 | 欧美日韩影院 | 精品国产第一页 | 亚洲专区在线播放 | 毛片全黄| 欧美老女人bb | 久久久久草 | 97精品人人a片免费看 | 国产原创麻豆 | 中文字幕在线看高清电影 | 欧美videossex另类 | 久久久久久久国产精品视频 | 日本精品视频一区 | 香蕉黄色片 | 日本公妇乱淫免费视频一区三区 | 亚洲精品国产熟女久久久 | 无码任你躁久久久久久久 | 日日夜夜精品视频 | 成人在线免费播放 | 欧美操老女人 | 人妻夜夜爽天天爽三区麻豆av网站 | 国产精品15p | 午夜不卡福利视频 | 荒野求生21天去码版网站 | 国产成人免费网站 | 午夜刺激视频 | av黄在线观看 | 天天干天天操天天拍 | 国产精品日韩一区二区三区 | 亚洲影院中文字幕 | 三级三级久久三级久久 | 91高跟黑色丝袜呻吟在线观看 | 大象传媒成人在线观看 | 波多野结衣一二三四区 | 午夜在线观看视频18 |