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

VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀

 更新時間:2022年08月31日 10:31:54   作者:得知此事須躬行  
這篇文章主要介紹了VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

h()函數(shù)和createVNode()函數(shù)的使用

使用方法

  • h(標(biāo)簽, {屬性},內(nèi)容)
  • h(標(biāo)簽, {屬性},[可以繼續(xù)嵌套h()])
  • createVNode(標(biāo)簽, {屬性},內(nèi)容)
  • createVNode(標(biāo)簽, {屬性},[可以繼續(xù)嵌套createVNode()])

其實h()函數(shù)和createVNode()函數(shù)都是創(chuàng)建dom節(jié)點,他們的作用是一樣的,但是在VUE3中createVNode()函數(shù)的功能比h()函數(shù)要多且做了性能優(yōu)化,渲染節(jié)點的速度也更快。

import { createApp } from "vue";
//import App from "./App.vue";
import { defineComponent, h, createVNode } from "vue";
import HelloWorld from "./components/HelloWorld.vue";
const img = require('./assets/logo.png'); // eslint-disable-line
const App = defineComponent({
  render() {
        return h("div", { id: "app" }, [
            h("img", { src: img }),
            h(HelloWorld, { msg: "HelloWorld" }),
            createVNode("h1", { class: "hello" }, "HelloWorld")
        ]
        );
  },
});
createApp(App).mount("#app");

渲染出來的結(jié)果為:

VUE3中h方法和createVnode的實現(xiàn)

h方法是給用戶來用的,它具備著多樣性。我們先來寫createVnode

在公共包shared里寫上ShapeFlags

采用二進(jìn)制來標(biāo)識某些東西

在runtime-core模塊里創(chuàng)建vnode.ts文件專門處理虛擬節(jié)點

虛擬節(jié)點有很多,組件的、元素的和文本的

用ShapeFlags來判斷是否是字符串,判斷兒子children是否是個數(shù)組

children不是數(shù)組類型,則標(biāo)識為text_children

將不同情況打上ShapeFlag標(biāo)識

最后把來共同標(biāo)識這個vode節(jié)點的類型

為了后續(xù)的diff算法,我們要給這個虛擬節(jié)點上加一些屬性和標(biāo)識 

image.png

h的用法

h(‘div')
h(‘div',{style:{‘color':‘red'}},‘hello')
h(‘div',‘hello')
h(‘div',h(‘span'))
h(‘div',[h(‘span'),h(‘span')])
h(‘div',null,‘hello',‘world')
h(‘div',null,h(‘span'))
h(‘div',null,[h(‘span')])

創(chuàng)建h.ts文件來寫h方法

先判斷參數(shù)長度

如果參數(shù)長度等于2,那么我們要區(qū)分一下第二個參數(shù)是個h方法處理過的虛擬節(jié)點,還是一個普通的屬性對象,或者是一個數(shù)組

如果第二個參數(shù)是不是一個數(shù)組并且也不是一個對象,那么判斷第二個參數(shù)是否是h方法處理過的虛擬節(jié)點,如果是虛擬節(jié)點,那么調(diào)用createVnode,第二個參數(shù)傳null,第三個參數(shù)包裝成數(shù)組。如果不是虛擬節(jié)點,那肯定就是普通屬性

如果第二個參數(shù)是數(shù)組或者不是對象,第二個參數(shù)傳null,直接把propsChildren傳入第三個參數(shù),傳第三個參數(shù)后,都可以處理到,包括文本元素

如果參數(shù)長度大于3,后續(xù)的參數(shù)包裝成一個數(shù)組

如果參數(shù)長度等于3,并且children是一個虛擬節(jié)點,children包裝成一個數(shù)組

最后統(tǒng)一調(diào)createVnode

總結(jié),其實我們上述的一系列判斷的核心是處理傳入createVnode的第三個參數(shù),這個參數(shù)只可能是文本或者數(shù)組

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

相關(guān)文章

  • 如何實現(xiàn)一個簡易版的vuex持久化工具

    如何實現(xiàn)一個簡易版的vuex持久化工具

    這篇文章主要介紹了實現(xiàn)一個簡易版的vuex持久化工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的方法

    vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的方法

    在Web開發(fā)中經(jīng)常需要使用圖片,有時候需要對圖片進(jìn)行上傳,這篇文章主要給大家介紹了關(guān)于vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 解決vue keep-alive 數(shù)據(jù)更新的問題

    解決vue keep-alive 數(shù)據(jù)更新的問題

    今天小編就為大家分享一篇解決vue keep-alive 數(shù)據(jù)更新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue項目build打包后部分樣式錯亂的解決

    vue項目build打包后部分樣式錯亂的解決

    這篇文章主要介紹了vue項目build打包后部分樣式錯亂的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue腳手架創(chuàng)建項目時報catch錯誤及解決

    vue腳手架創(chuàng)建項目時報catch錯誤及解決

    這篇文章主要介紹了vue腳手架創(chuàng)建項目時報catch錯誤及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue全局接入百度地圖的實現(xiàn)示例

    vue全局接入百度地圖的實現(xiàn)示例

    本文主要介紹了vue全局接入百度地圖的實現(xiàn)示例,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue動態(tài)子組件的兩種實現(xiàn)方式

    vue動態(tài)子組件的兩種實現(xiàn)方式

    這篇文章主要介紹了vue動態(tài)子組件的兩種實現(xiàn)方式,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • vue template中slot-scope/scope的使用方法

    vue template中slot-scope/scope的使用方法

    今天小編就為大家分享一篇vue template中slot-scope/scope的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue中的默認(rèn)插槽詳解

    Vue中的默認(rèn)插槽詳解

    在 Vue 中,插槽(Slot)是一種非常強(qiáng)大且靈活的機(jī)制,用于在組件中插入內(nèi)容,默認(rèn)插槽是在父組件中傳遞內(nèi)容給子組件時使用的一種方式,這篇文章主要介紹了Vue中的默認(rèn)插槽詳解,需要的朋友可以參考下
    2024-01-01
  • vue3輸入框生成的時候如何自動獲取焦點詳解

    vue3輸入框生成的時候如何自動獲取焦點詳解

    記錄一下自己最近開發(fā)vue3.0的小小問題,下面這篇文章主要給大家介紹了關(guān)于vue3輸入框生成的時候如何自動獲取焦點的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評論

巫山县| 花莲县| 博罗县| 安吉县| 阿图什市| 郧西县| 澄城县| 谷城县| 浪卡子县| 隆化县| 宜宾市| 炉霍县| 福海县| 汨罗市| 汝南县| 巴中市| 平武县| 苏尼特右旗| 黄龙县| 简阳市| 遂平县| 灵山县| 洛浦县| 宜兰县| 东台市| 东山县| 阜新| 汽车| 蒲城县| 监利县| 襄城县| 安福县| 浏阳市| 六安市| 睢宁县| 罗甸县| 天台县| 鄂温| 来宾市| 内丘县| 洪雅县|