成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

淺析Vue 中的 render 函數

瀏覽:132日期:2023-02-05 13:23:43

render函數是什么

簡單的說,在vue中我們使用模板HTML語法組建頁面的,使用render函數我們可以用js語言來構建DOM

因為vue是虛擬DOM,所以在拿到template模板時也要轉譯成VNode的函數,而用render函數構建DOM,vue就免去了轉譯的過程。

當使用render函數描述虛擬DOM時,vue提供一個函數,這個函數是就構建虛擬DOM所需要的工具。官網上給他起了個名字叫createElement。還有約定的簡寫叫h,

vm中有一個方法_c,也是這個函數的別名

先看官網對 createElement的介紹

// @returns {VNode}createElement( // {String | Object | Function} // 一個 HTML 標簽字符串,組件選項對象,或者 // 解析上述任何一種的一個 async 異步函數,必要參數。 ’div’, // {Object} // 一個包含模板相關屬性的數據對象 // 這樣,您可以在 template 中使用這些屬性。可選參數。 { // (詳情見下一節) }, // {String | Array} // 子節點 (VNodes),由 `createElement()` 構建而成, // 或使用字符串來生成“文本節點”。可選參數。 [ ’先寫一些文字’, createElement(’h1’, ’一則頭條’), createElement(MyComponent, { props: { someProp: ’foobar’ } }) ])

就是說createElement(params1,params2,params3)接受三個參數,每個參數的類型官方介紹已經說明

好了,開始今天的正文。

本文 GitHub https://github.com/qq44924588... 上已經收錄,更多往期高贊文章的分類,也整理了很多我的文檔,和教程資料。歡迎Star和完善,大家面試可以參照考點復習,希望我們一起有點東西。

我們知道 Vue 模板是非常強大的,基本可以完成我們日常開發的所有任務。但是,有一些用例,如基于輸入或插槽值創建動態組件方式, render 函數會比模板完成的更好也更出色。

用過 React 開發的人對 render 函數應該非常熟悉,因為React組件通過 JSX和 render 函數來構建的。 盡管Vue render 函數也可以用JSX編寫,但在這里我們使用原生 JS方式,因為這樣,我們可以更輕松地了解Vue組件系統的一些基礎。

值得注意的是,Vue 的模板實際上在編譯時也是會先解析成 render 函數表示方式。 模板只是在 render 函數之上提供了一個方便且熟悉的語法糖。 盡管 render 函數更強大,但 render 函數可讀性很差,相對用的也比較少了。

創建組件

帶有 render 函數的組件沒有 template 標記或屬性。 相反,該組件定義了一個了名為 render 的函數,該函數接收一個 reateElement(renderElement: String | Component, definition: Object, children: String | Array) 參數(由于某種原因,通常別名為 h ,歸咎于JSX)并返回使用該函數創建的元素,其他一切保持不變,來看看事例:

export default { data() { return { isRed: true } }, /* * <template> * <div :class='{’is-red’: isRed}'> * <p>這是一個 render 事例</p> * </div> * </template> */ // render 中的渲染結果與上面等價 render(h) { return h(’div’, { ’class’: { ’is-red’: this.isRed } }, [ h(’p’, ’這是一個 render 事例’) ]) }}

render 函數中如何表示指令

Vue 模板具有各種便捷功能,以便向模板添加基本邏輯和綁定功能,如 v-if 、 v-for 、 v-moel 指令等。 在 render 函數中是無法使用這些指令的。 取而代之的是以純 JS 來實現,對于大多數指令而言,這也是比較簡單的。

v-if

v-if 用純 JS 實現很簡單,只需圍繞 createElement 調用使用 if(expr) 語句即可。

v-for

v-for 可以使用 for-of , Array.map , Array.filter 等的JS方法中的任何一種來實現。我們可以通過非常有趣的方式將它們組合在一起,以實現過濾或狀態切片,而無需計算屬性。

例如,有以下 Vue 的模板代碼

<template> <ul> <li v-for='pea of pod'> </li> </ul></template>

可以用下面的 render 函數來實現上面的效果:

render(h) { return h(’ul’, this.pod.map(pea => h(’li’, pea.name)));}

v-model

我們知道, v-model 只是 bind 屬性與 value 的語法糖,并在觸發 input 事件時設置數據屬性。但是,在 render 函數沒有這樣的簡寫,我們需要自己實現。

假設,在 Vue 中,我們有如下的結構:

<template> <input v-model=’myBoundProperty’/></template>

上面代碼等價于:

<template> <input :value='myBoundProperty' @input='myBoundProperty = $event.target.value'/></template>

在 render 函數中可以用下面方式來實現上面的代碼:

render(h) { return h(’input’, { domProps: { value: this.myBoundProperty }, on: { input: e => { this.myBoundProperty = e.target.value } } })}

v-bind

attribute 和 property 這兩種類型的綁定被放在元素定義中,如 arttrs 、 props 和 domProps ( value 和 innerHTML 之類的東西)。

render(h) { return h(’div’, { attrs: { // <div :id='myCustomId'> id: this.myCustomId }, props: { // <div :someProp='someonePutSomethingHere'> someProp: this.someonePutSomethingHere }, domProps: { // <div :value='somethingElse'> value: this.somethingElse } });}

需要注意的是,對于 class 和 style 的綁定是直接在定義的根進行處理,而不是作為 attrs , props 或 domProps 處理。

render(h) { return h(’div’, { // “類”是JS中的保留關鍵字,因此必須引用它。 ’class’: { myClass: true, theirClass: false }, style: { backgroundColor: ’green’ } });}

v-on

對事件處理程也是直接添加到元素定義中 on 定義

render(h) { return h(’div’, { on: { click(e) { console.log(’I got clickeded!’) } } });}

事件的修飾符可以在處理程序內部實現:

.stop -> e.stopPropagation().prevent -> e.preventDefault().self -> if (e.target !== e.currentTarget) return

鍵盤修飾符

.[TARGET_KEY_CODE] -> if (event.keyCode !== TARGET_KEY_CODE) return.[MODIFIER] -> if (!event.MODIFIERKey) return

特殊屬性

Slots 可以通過 this.$slots 作為 createElement() 節點的數組來訪問插槽。

作用域插槽存儲在 this.$scopedSlots[scope](props:object) 中,作為返回 createElement() 節點數組的函數。

代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug 。

總結

到此這篇關于淺析Vue 中的 render 函數的文章就介紹到這了,更多相關Vue render 函數內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美色图麻豆| 精品免费国产一区二区三区四区| 国产精品婷婷| 2020国产精品| 久久99精品久久只有精品| 尹人成人综合网| 国产日产欧美一区二区三区 | 黑人巨大精品欧美一区| 国产精品免费一区二区三区观看| 国产精品久久久久久久久免费桃花| 成人国产免费视频| 欧美精品777| 国模娜娜一区二区三区| 国产成人午夜高潮毛片| 欧美日韩视频在线观看一区二区三区| 日韩精品电影在线| 亚洲一卡久久| 亚洲一区二区三区四区中文字幕| 欧美日韩网站| 国产亚洲精品7777| 91麻豆精品一区二区三区| 精品福利在线导航| 99这里都是精品| 日韩欧美精品在线| 懂色av一区二区三区免费观看| 欧美精品久久一区| 久久er精品视频| 欧美日韩精品欧美日韩精品| 美女视频黄频大全不卡视频在线播放| 色伊人久久综合中文字幕| 免费观看91视频大全| 欧美色偷偷大香| 狠狠色狠狠色综合| 欧美日本不卡视频| 国产91高潮流白浆在线麻豆| 日韩视频在线观看一区二区| 成熟亚洲日本毛茸茸凸凹| 精品福利一区二区三区免费视频| av网站一区二区三区| 国产目拍亚洲精品99久久精品| 国产一区二区在线观看免费播放| 一区二区三区中文免费| 美女黄色成人网| 韩国成人精品a∨在线观看| 欧美一级片在线观看| 成人国产电影网| 国产精品久久久久久久久久免费看 | 91在线观看视频| 国产亚洲精品免费| 亚洲乱码视频| 亚洲午夜久久久久久久久电影院| 久久精品系列| 国产在线观看免费一区| 日韩精品资源二区在线| 91麻豆国产自产在线观看| 国产亚洲精品免费| 日韩亚洲视频| 丝袜亚洲另类欧美综合| 欧美一级片在线观看| 91亚洲永久精品| 综合色天天鬼久久鬼色| 在线免费观看视频一区| 国产精品一区免费视频| 亚洲精品一区二区三区精华液| 欧美日韩免费观看一区| 亚洲九九爱视频| 欧美亚洲动漫另类| 成人av电影在线观看| 最新热久久免费视频| 久久精品国产第一区二区三区最新章节| 麻豆一区二区在线| 精品国产乱码久久| 亚洲午夜在线| 三级在线观看一区二区| 欧美v日韩v国产v| 伊人久久大香线蕉综合热线| 亚洲成av人片观看| 精品国精品国产尤物美女| 亚洲精品美女91| 蜜桃91丨九色丨蝌蚪91桃色| 久久久久99精品一区| 国产欧美日韩一级| 久久福利资源站| 日本一区二区免费在线观看视频| 亚洲自拍另类| 国产高清精品在线| 中文字幕视频一区| 欧美日韩一区成人| 韩日午夜在线资源一区二区| 激情综合网av| 国产精品三级av在线播放| 美日韩在线观看| 99精品视频免费在线观看| 亚洲一区二区在线免费看| 日韩欧美123| 亚洲一区日韩在线| 91一区二区三区在线播放| 偷窥少妇高潮呻吟av久久免费| 日韩欧美国产午夜精品| 国产精品久久久久久模特| 国产福利一区二区三区在线视频| 亚洲精品写真福利| 日韩一区二区电影网| 国产美女在线观看一区| 亚洲精品日韩一| 日韩一区二区中文字幕| 亚洲一区bb| 欧美大片一区| 韩国一区二区视频| 一区二区三区在线不卡| 91麻豆精品国产91久久久资源速度| 亚洲精品乱码久久久久久蜜桃麻豆| 国产91露脸合集magnet | 91精品国产欧美一区二区18 | 日韩欧美在线综合网| 免费在线观看成人av| 99r国产精品| 久久99久久99| 亚洲精品乱码久久久久| 欧美大尺度电影在线| 久久免费高清| 很黄很黄激情成人| 国产精品综合二区| 日本午夜精品一区二区三区电影| 国产精品久久久久久久浪潮网站| 欧美精品亚洲二区| 国产精品日韩久久久| 99精品视频一区| 国内精品视频一区二区三区八戒| 亚洲国产日韩一级| 国产精品萝li| 精品国产一区二区三区av性色| 欧美综合在线视频| 激情文学一区| 不卡电影免费在线播放一区| 久色婷婷小香蕉久久| 一区二区成人在线视频| 欧美韩国一区二区| 久久久久亚洲综合| 在线综合亚洲欧美在线视频| 一本大道久久精品懂色aⅴ| 99亚洲视频| 女人香蕉久久**毛片精品| 亚洲欧美影音先锋| 国产欧美一区二区三区在线看蜜臀 | 日本一区二区免费在线| 欧美一区二区在线免费播放| 久久婷婷亚洲| 99精品福利视频| 欧美少妇一区| 91影院在线观看| 国产成人一区在线| 麻豆精品国产91久久久久久| 亚洲gay无套男同| 亚洲美女在线国产| 国产精品区一区二区三区| 日韩精品一区二区三区蜜臀 | 91精品麻豆日日躁夜夜躁| 色综合久久精品| 亚洲国产欧洲综合997久久| 国产在线日韩| 欧美精品尤物在线| 成人黄色av电影| 福利一区二区在线| 国产一区二区在线观看视频| 毛片一区二区三区| 青青草91视频| 日本在线观看不卡视频| 日韩高清不卡在线| 亚洲123区在线观看| 一级精品视频在线观看宜春院| 亚洲色图视频网站| 中文字幕在线一区二区三区| 国产精品色婷婷| 国产精品久久久久久妇女6080| 日本一区二区视频在线| 国产清纯白嫩初高生在线观看91| 国产欧美日韩久久| 久久精品一区四区| 久久青草国产手机看片福利盒子| 久久午夜电影网| 欧美国产激情二区三区| 久久免费精品国产久精品久久久久| 久久综合色天天久久综合图片| 久久久久久9999| 国产精品久久久久久久久久免费看| 中文字幕欧美日韩一区| 国产精品国产三级国产专播品爱网| 亚洲三级免费电影| 亚洲一级在线观看| 日韩精品一级中文字幕精品视频免费观看| 日本欧美一区二区| 激情小说亚洲一区| 国产一区二区在线影院| 国产69精品久久99不卡| 色综合天天天天做夜夜夜夜做| 狠狠色综合网| 香蕉久久夜色精品国产| 色婷婷精品久久二区二区蜜臂av | 亚洲成人精品影院|