日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

淺析Vue 中的 render 函數

瀏覽:166日期: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 中使用這些屬性??蛇x參數。 { // (詳情見下一節) }, // {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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合国产在线| 久久的色偷偷| 99精品视频精品精品视频| 欧美日韩免费观看视频| 美女久久久久久| 久久久久免费| 好吊日精品视频| 亚欧洲精品视频在线观看| 亚洲精品裸体| 麻豆精品在线播放| 日韩欧美综合| 香蕉久久夜色精品国产| 日韩精品成人在线观看| 美女尤物国产一区| 成人亚洲欧美| 日韩视频一区| 日本a级不卡| 国产福利资源一区| 日韩中文字幕高清在线观看| 欧洲一级精品| 亚洲免费婷婷| 国产欧美日韩在线一区二区| 精品99久久| 午夜精品一区二区三区国产| 亚洲一二av| 国产欧美一区二区精品久久久| 精品中文在线| 婷婷色综合网| 91成人在线网站| 亚洲精品一级二级| 亚洲色图网站| 超碰在线99| 伊人国产精品| 日本不良网站在线观看| 亚洲一区日本| 国产精久久一区二区| 激情久久久久久| 日本午夜免费一区二区 | 91精品一区二区三区综合在线爱| 男人天堂欧美日韩| 红杏一区二区三区| 亚洲五月综合| 日韩综合精品| 国产乱子精品一区二区在线观看 | 亚洲精一区二区三区| 久久久久九九精品影院| 国产精品88久久久久久| 国产精品一级在线观看| 欧美午夜不卡| 福利一区和二区| 亚洲1区在线观看| 国产99亚洲| 欧美激情日韩| 色狠狠一区二区三区| 成人羞羞在线观看网站| 久久av免费| 日韩精品久久理论片| 国产 日韩 欧美一区| 欧美日一区二区在线观看| 国产一区二区三区自拍| 欧美国产免费| 日韩精品电影一区亚洲| 在线一区电影| av日韩中文| 久久不卡国产精品一区二区| 免费成人性网站| 99热精品久久| 亚洲精品成人图区| 国产精品久久久久久久久久齐齐 | 国产亚洲永久域名| 日韩电影二区| 精品久久久久中文字幕小说| 亚洲欧洲免费| 国产精品人人爽人人做我的可爱| 精品国产精品久久一区免费式| 亚洲理论在线| 性一交一乱一区二区洋洋av| 激情欧美一区二区三区| 欧美国产美女| 国产精品va视频| 日本亚州欧洲精品不卡| 日韩一级网站| 久久精品免费一区二区三区| 国产精品毛片久久| 久久精品国产在热久久| 国产精品一区二区av日韩在线| 亚洲日本三级| 免费看欧美美女黄的网站| 亚洲一区国产一区| 免费日韩视频| 快she精品国产999| 在线一区二区三区视频| 亚洲在线电影| 亚洲一区二区三区免费在线观看| 婷婷综合亚洲| 99国产精品99久久久久久粉嫩| 国产中文一区| 久久久水蜜桃av免费网站| 蜜桃精品在线| 精品在线99| 国产精品日本| 亚洲青青久久| 久久精品超碰| 国产精品欧美大片| 久久精品伊人| 另类专区亚洲| 欧美日韩在线观看视频小说| 99国内精品| 亚洲精品福利| 国产精品一区二区精品| 成人污污视频| 国产真实久久| 丝袜国产日韩另类美女| 亚洲精品女人| 欧美精品导航| 日韩大片在线观看| 蜜桃tv一区二区三区| 石原莉奈一区二区三区在线观看| 亚洲九九精品| 久久av偷拍| 亚洲涩涩在线| 欧美在线影院| 日韩精品免费视频一区二区三区| 国产精品大片| 中文字幕在线免费观看视频| 在线一区电影| 日韩av一区二区三区| 久久99偷拍| 欧美性感美女一区二区| 亚洲啊v在线免费视频| 久久一区欧美| 日韩一区二区免费看| 国产精品一二| 伊人久久大香线蕉av不卡| 亚洲九九精品| 成人国产精品一区二区免费麻豆| 激情五月综合| 日本不卡在线视频| 日韩国产激情| 日韩一区二区三免费高清在线观看| 久久精品理论片| 亚洲欧美日韩国产一区| 国产精品极品在线观看| 激情综合在线| 国产亚洲电影| 一区二区自拍| 久久精品福利| 亚洲综合专区| 成人日韩在线观看| 日本a级不卡| 精品一区毛片| 免费日韩一区二区三区| 午夜亚洲精品| 97精品一区| 91伊人久久| 亚洲香蕉网站| 国产精品巨作av| 国产亚洲毛片| 国产自产自拍视频在线观看| 亚洲精品一区二区在线播放∴| 97精品国产| 日本少妇一区二区| 午夜精品亚洲| 久久男人av资源站| 久久国产精品色av免费看| 亚洲大全视频| 97精品国产| 国产精品一区三区在线观看| 国产免费成人| 香蕉成人av| 精品国产亚洲一区二区在线观看| 综合一区av| 亚州av乱码久久精品蜜桃| 精品国产乱码| 国产精品主播| 蜜桃视频一区二区三区在线观看| 日韩免费小视频| 欧美激情在线精品一区二区三区| 日韩中文欧美在线| 久久黄色影院| 国产不卡精品| 国产精品一区二区精品 | 久久精品1区| 福利一区和二区| 国产精品日本一区二区不卡视频| 亚洲一区二区小说| 99久久精品费精品国产| 九九99久久精品在免费线bt| 91精品视频一区二区| 日韩影院精彩在线| 伊人久久亚洲美女图片| 久久精品国产99久久| 久久电影tv| 成人午夜亚洲| 麻豆高清免费国产一区| 国产精品一区二区三区四区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲精品在线观看91| 久久伦理在线| 久久一区二区三区电影|