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

一文帶你了解什么是Vue?Vapor

 更新時(shí)間:2024年11月26日 14:42:18   作者:前端歐陽  
隨著Svelte和SolidJS的流行,無虛擬DOM模式逐漸開始火了起來,Vue?Vapor就是一個(gè)無虛擬DOM模式版本的vue,下面就跟隨小編一起來深入了解一下Vue?Vapor吧

前言

隨著SvelteSolidJS的流行,無虛擬DOM模式逐漸開始火了起來。vue也推出了無虛擬DOM模式的版本,就是我們今天要講的Vue Vapor

什么是Vue Vapor

Vue Vapor是一個(gè)無虛擬DOM模式版本的vue。這個(gè)倉庫是2023年11月9日基于vuejs/core倉庫(也就是vue3倉庫)新建的,項(xiàng)目地址為 https://github.com/vuejs/core-vapor。Vue Vapor目前還處于實(shí)驗(yàn)階段,不過你可以通過官方提供的Vue Vapor演練場在線體驗(yàn)無虛擬DOM版本的vue。playground演練場的地址為:https://vapor-repl.netlify.app。

目前Vue Vapor只實(shí)現(xiàn)了vue3中的部分功能,KeepAlive、Teleport等還未實(shí)現(xiàn)。詳情查看官方的TODO:https://github.com/vuejs/core-vapor?tab=readme-ov-file#todo

如何使用Vue Vapor

對于使用者來說無虛擬DOM模式版本的vue和目前的vue3用法是一樣的,vue只是對內(nèi)部實(shí)現(xiàn)進(jìn)行了修改,對外暴露出的API還是一樣的,當(dāng)然關(guān)于虛擬DOM相關(guān)的API在Vue Vapor中沒有了。

我們來看看一個(gè)demo,和目前vue3寫法是一樣的:

<script setup>
import { ref } from 'vue'
const msg = ref('Hello World!')
</script>

<template>
  <h1>{{ msg }}</h1>
  <input v-model="msg" />
</template>

我們再來看看運(yùn)行效果:

從*.vue文件渲染到瀏覽器真實(shí)DOM的過程

我們先來看看目前版本的vue是如何從一個(gè)*.vue文件渲染到瀏覽器真實(shí)DOM?

目前的vue是通過webpack或者vite等工具先將*.vue文件編譯成一個(gè)js文件,js文件中主要的就是render函數(shù)。然后執(zhí)行render函數(shù)生成虛擬DOM,再調(diào)用瀏覽器的DOM API根據(jù)虛擬DOM生成真實(shí)DOM掛載到瀏覽器上。

我們再來看看Vue Vapor是如何從一個(gè)*.vue文件渲染到瀏覽器真實(shí)DOM?

也是一樣的首先通過webpack或者vite等工具先將*.vue文件編譯成一個(gè)js文件,js文件中主要的就是render函數(shù)。然后執(zhí)行render函數(shù)后會直接調(diào)用瀏覽器的DOM API生成真實(shí)DOM掛載到瀏覽器上。其實(shí)就是跳過了虛擬DOM的過程。

沒有虛擬DOM后,Vue Vapor如何實(shí)現(xiàn)響應(yīng)式

我們先來看看demo編譯后的js代碼中的render函數(shù),下面是我簡化后的代碼:

function render(_ctx) {
  _withDirectives(n2, [[_vModelText, () => _ctx.msg]])
  _on(n2, "update:modelValue", $event => ((_ctx.msg) = $event))

  _renderEffect(() => {
    _setText(n1, _ctx.msg)
  })
}

這里的n2變量為input輸入框dom元素,n1變量為顯示msg值的h1標(biāo)簽dom元素。明顯可以看見render函數(shù)中沒有createElementVNode等生成虛擬DOM的函數(shù)調(diào)用。

我們先來看看_withDirectives函數(shù),vue3withDirectives函數(shù)的功能為給虛擬DOM增加自定義指令。我們這里沒有虛擬DOM,所以這里是給真實(shí)DOM(input輸入框)增加v-model的指令。

我們再來看看下面 _on函數(shù),這里是讓input輸入框監(jiān)聽一個(gè)名為update:modelValue的事件,觸發(fā)事件后會將上下文中的msg變量的值更新為輸入框中的輸入值。

我們最后來看看_renderEffect函數(shù),看名字你可能已經(jīng)猜出來了。這個(gè)函數(shù)和vue3中的watchEffect比較相似,會立即運(yùn)行一個(gè)函數(shù)。并且追蹤函數(shù)中用的的依賴,這里的依賴是msg變量。當(dāng)依賴的值變化時(shí)會再次執(zhí)行這個(gè)函數(shù)。

這里的_setText(n1, _ctx.msg),實(shí)際就是執(zhí)行了n1.textContent = _ctx.msg。textContent 屬性表示一個(gè)節(jié)點(diǎn)及其后代的文本內(nèi)容,也可能通過給它賦值的方式刪除它的所有子節(jié)點(diǎn),并替換為一個(gè)具有給定值的文本節(jié)點(diǎn),和innerText功能比較相似。

當(dāng)msg變量的值變了后就會執(zhí)行回調(diào)函數(shù),在回調(diào)函數(shù)中會執(zhí)行_setText函數(shù)。_setText函數(shù)會通過更新h1標(biāo)簽的textContent屬性讓h1標(biāo)簽始終顯示msg變量最新的值,從而實(shí)現(xiàn)響應(yīng)式。

總結(jié)

本文介紹了Vue Vapor,沒有虛擬DOM版本的vue。對于普通開發(fā)者來說Vue Vapor其實(shí)和目前的vue3沒有什么區(qū)別,前提是不涉及虛擬DOM。只是vue在內(nèi)部實(shí)現(xiàn)上去掉了虛擬DOM,改為直接操作真實(shí)DOM。

到此這篇關(guān)于一文帶你了解什么是Vue Vapor的文章就介紹到這了,更多相關(guān)Vue Vapor內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue封裝實(shí)現(xiàn)自動循環(huán)滾動的列表

    vue封裝實(shí)現(xiàn)自動循環(huán)滾動的列表

    在做數(shù)據(jù)大屏開發(fā)的過程中,經(jīng)常出現(xiàn)需要對列表進(jìn)行自動滾動的需求,所以本文就來為大家介紹一下如何利用vue封裝一個(gè)自動循環(huán)滾動的列表吧
    2023-09-09
  • Vue將將后端返回的list數(shù)據(jù)轉(zhuǎn)化為樹結(jié)構(gòu)的實(shí)現(xiàn)

    Vue將將后端返回的list數(shù)據(jù)轉(zhuǎn)化為樹結(jié)構(gòu)的實(shí)現(xiàn)

    本文主要介紹了Vue將將后端返回的list數(shù)據(jù)轉(zhuǎn)化為樹結(jié)構(gòu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 深入了解Vue之組件的生命周期流程

    深入了解Vue之組件的生命周期流程

    每個(gè)Vue實(shí)例在創(chuàng)建時(shí)都要經(jīng)過一系列初始化,?例如設(shè)置數(shù)據(jù)監(jiān)聽、編譯模板、將實(shí)例掛載到DOM并在數(shù)據(jù)變化時(shí)更新DOM等,同時(shí),?也會運(yùn)行一些叫作生命周期鉤子的函數(shù),接下來讓我們一起來探索Vue實(shí)例被創(chuàng)建時(shí)都經(jīng)歷了什么,感興趣的同學(xué)跟著小編一起來探討吧
    2023-05-05
  • vue+elementui實(shí)現(xiàn)動態(tài)添加行/可編輯的table

    vue+elementui實(shí)現(xiàn)動態(tài)添加行/可編輯的table

    這篇文章主要為大家詳細(xì)介紹了vue+elementui實(shí)現(xiàn)動態(tài)添加行/可編輯的table,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • electron-vite工具打包后如何通過內(nèi)置配置文件動態(tài)修改接口地址

    electron-vite工具打包后如何通過內(nèi)置配置文件動態(tài)修改接口地址

    使用electron-vite?工具開發(fā)項(xiàng)目打包完后每次要改接口地址都要重新打包,對于多環(huán)境切換或者頻繁變更接口地址就顯得麻煩,這篇文章主要介紹了electron-vite工具打包后通過內(nèi)置配置文件動態(tài)修改接口地址實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-05-05
  • 詳解vue通過NGINX部署在子目錄或者二級目錄實(shí)踐

    詳解vue通過NGINX部署在子目錄或者二級目錄實(shí)踐

    這篇文章主要介紹了詳解vue通過NGINX部署在子目錄或者二級目錄實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue內(nèi)置組件keep-alive事件動態(tài)緩存實(shí)例

    vue內(nèi)置組件keep-alive事件動態(tài)緩存實(shí)例

    這篇文章主要介紹了vue內(nèi)置組件keep-alive事件動態(tài)緩存實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 詳解vue中使用微信jssdk

    詳解vue中使用微信jssdk

    這篇文章主要介紹了vue中使用微信jssdk,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue中關(guān)于$emit和$on的使用及說明

    vue中關(guān)于$emit和$on的使用及說明

    這篇文章主要介紹了vue中關(guān)于$emit和$on的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue實(shí)現(xiàn)過渡效果的基本方法

    Vue實(shí)現(xiàn)過渡效果的基本方法

    Vue 提供了一個(gè)強(qiáng)大的過渡系統(tǒng),可以用于在進(jìn)入、離開和列表渲染時(shí)添加各種動畫效果,這些過渡不僅能夠提升用戶體驗(yàn),還能使界面更加生動和吸引人,本文將介紹 Vue 中實(shí)現(xiàn)過渡效果的基本方法,并提供使用 setup 語法糖的代碼示例,需要的朋友可以參考下
    2024-09-09

最新評論

南川市| 冀州市| 浦县| 当雄县| 策勒县| 黔南| 桐城市| 云南省| 华坪县| 乌兰察布市| 政和县| 婺源县| 博白县| 吉林市| 惠安县| 台州市| 三亚市| 清河县| 安吉县| 启东市| 广水市| 壶关县| 阿坝| 星座| 葵青区| 襄垣县| 永平县| 会昌县| 滦南县| 察雅县| 衡东县| 桑植县| 永康市| 榆林市| 博兴县| 封丘县| 正阳县| 科尔| 新野县| 贵阳市| 满洲里市|