成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

vue渲染函數使用哪個命令

vue渲染函數使用“render”命令。vue中是使用模板HTML語法組建頁面的,使用render函數可以用js語言來構建DOM。因為vue是虛擬DOM,所以在拿到template模板時也要轉譯成VNode的函數,而用render()函數構建DOM,vue就免去了轉譯的過程。

vue渲染函數使用哪個命令

本教程操作環境:windows7系統、vue3版,DELL G3電腦。

在絕大多數情況下,Vue 推薦使用模板語法來創建應用。然而在某些使用場景下,我們真的需要用到 JavaScript 完全的編程能力。這時渲染函數–render就派上用場了。

1. render函數的介紹

簡單的說,在vue中我們使用模板HTML語法組建頁面的,使用render函數我們可以用js語言來構建DOM。 因為vue是虛擬DOM,所以在拿到template模板時也要轉譯成VNode的函數,而用render函數構建DOM,vue就免去了轉譯的過程。

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

1.1 虛擬 DOM

Vue 通過建立一個虛擬 DOM 來追蹤自己要如何改變真實 DOM。請仔細看這行代碼:

return createElement('h1', this.blogTitle)
登錄后復制

createElement 到底會返回什么呢?其實不是一個實際的 DOM 元素。它更準確的名字可能是createNodeDescription,因為它所包含的信息會告訴 Vue 頁面上需要渲染什么樣的節點,包括及其子節點的描述信息。我們把這樣的節點描述為“虛擬節點 (virtual node)”,也常簡寫它為“VNode”?!疤摂M DOM”是我們對由 Vue 組件樹建立起來的整個 VNode 樹的稱呼。

1.2 createElement 接受的參數

// @returns {VNode} createElement(   // {String | Object | Function}   // 一個 HTML 標簽名、組件選項對象,或者   // resolve 了上述任何一種的一個 async 函數。必填項。   'div',    // {Object}   // 一個與模板中屬性對應的數據對象??蛇x。   {     // (詳情見1.3)   },    // {String | Array}   // 子級虛擬節點 (VNodes),由 `createElement()` 構建而成,   // 也可以使用字符串來生成“文本虛擬節點”??蛇x。   [     '先寫一些文字',     createElement('h1', '一則頭條'),     createElement(MyComponent, {       props: {         someProp: 'foobar'       }     })   ] )
登錄后復制

1.3 render函數的使用

render:(h) => {   return h('div',{     // 給div綁定class屬性     class: {       child: true,       more: false     },   // 給div綁定樣式   style:{     width:'200px',       height:'200px',   },    // 給div綁定點擊事件       on: {       click: () => {         console.log('點擊事件')       }     },   }) }
登錄后復制

1.4 深入render函數數據對象

正如 v-bind:class 和 v-bind:style 在模板語法中會被特別對待一樣,它們在 VNode 數據對象中也有對應的頂層字段。該對象也允許你綁定普通的 HTML attribute,也允許綁定如 innerHTML 這樣的 DOM 屬性 (這會覆蓋 v-html 指令)

{   // 與 `v-bind:class` 的 API 相同,   // 接受一個字符串、對象或字符串和對象組成的數組   'class': {     foo: true,     bar: false   },   // 與 `v-bind:style` 的 API 相同,   // 接受一個字符串、對象,或對象組成的數組   style: {     color: 'red',     fontSize: '14px'   },   // 普通的 HTML attribute   attrs: {     id: 'foo'   },   // 組件 prop   props: {     myProp: 'bar'   },   // DOM 屬性   domProps: {     innerHTML: 'baz'   },   // 事件監聽器在 `on` 屬性內,   // 但不再支持如 `v-on:keyup.enter` 這樣的修飾器。   // 需要在處理函數中手動檢查 keyCode。   on: {     click: this.clickHandler   },   // 僅用于組件,用于監聽原生事件,而不是組件內部使用   // `vm.$emit` 觸發的事件。   nativeOn: {     click: this.nativeClickHandler   },   // 自定義指令。注意,你無法對 `binding` 中的 `oldValue`   // 賦值,因為 Vue 已經自動為你進行了同步。   directives: [     {       name: 'my-custom-directive',       value: '2',       expression: '1 + 1',       arg: 'foo',       modifiers: {         bar: true       }     }   ],   // 作用域插槽的格式為   // { name: props => VNode | Array<VNode> }   scopedSlots: {     default: props => createElement('span', props.text)   },   // 如果組件是其它組件的子組件,需為插槽指定名稱   slot: 'name-of-slot',   // 其它特殊頂層屬性   key: 'myKey',   ref: 'myRef',   // 如果你在渲染函數中給多個元素都應用了相同的 ref 名,   // 那么 `$refs.myRef` 會變成一個數組。   refInFor: true }
登錄后復制

1.5 約束

組件樹中的所有 VNode 必須是唯一的。

這意味著,下面的渲染函數是不合法的:

render: function (createElement) {   var myParagraphVNode = createElement('p', 'hi')   return createElement('div', [     // 錯誤 - 重復的 VNode     myParagraphVNode, myParagraphVNode   ]) }
登錄后復制

如果你真的需要重復很多次的元素/組件,你可以使用工廠函數來實現。

例如,下面這渲染函數用完全合法的方式渲染了 20 個相同的段落:

render: function (createElement) {   return createElement('div',     Array.apply(null, { length: 20 }).map(function () {       return createElement('p', 'hi')     })   ) }
登錄后復制

2. render函數的應用

2.1 渲染一個簡單的元素

// app.vue (根組件)  <template>   <div id="app">     <myRender></myRender>   </div> </template>  <script> import myRender from './components/myRender' export default {   components:{     myRender   } } </script>
登錄后復制

// myRender.vue  <script> export default {   render:(h) => {     return h('div',{       class: {         child: true,         more: false       },       attrs: {         id: 'foo',         name: 'child'       },     style: {       width:'100%',         height:'200px',     },       domProps: {         innerHTML: '我是render渲染的子組件'       }     })   } } </script>  <style scoped> .child {   background: pink   font-size 24px   letter-spacing 2px } .more {   background: red } </style>
登錄后復制

vue渲染函數使用哪個命令

2.2 添加子標簽

<script> export default {   render:(h) => {     return h('div',       {         class: 'wrapper',         attrs: {           id: 'wrapper',         },       style: {         width:'100%',           height:'250px'       },       },[         h('h2','標題'),         h('div',{           class: 'content',           attrs: {             id: 'content',           },           style:{             width:'800px',             height:'100px'           },           domProps:{             innerHTML:'我是內容'           }         })       ]     )   } } </script>  <style scoped> .wrapper    background: pink   letter-spacing 2px   .content      margin 0 auto      background: red     color #ffffff     font-size 24px  </style>
登錄后復制

vue渲染函數使用哪個命令

2.3 使用 JavaScript 代替模板功能

只要在原生的 JavaScript 中可以輕松完成的操作,Vue 的渲染函數就不會提供專有的替代方法。

1、v-if 和 v-for 模板語法中:

<ul v-if="items.length">   <li v-for="item in items">{{ item.name }}</li> </ul> <p v-else>No items found.</p>  <script> export default {   data(){     return{       items:[1,2,3]     }   } } </script>
登錄后復制

render函數實現:

<script> export default {   render: function (createElement) {     if (this.items.length) {       return createElement('ul', this.items.map(function (item) {         return createElement('li', item.name)       }))     } else {       return createElement('p', 'No items found.')     }   },   data(){     return{       items:[1,2,3]     }   } } </script>
登錄后復制

2、v-model

<script> export default {   render:function(createElement) {     var self = this     return createElement('div',[         createElement('div',{class: 'showContent'},self.inputValue),         createElement('input',{           class: 'content',           domProps:{             value:self.inputValue           },           on:{             input:function(event){               self.inputValue = event.target.value             }           }         })       ]     )   },   data(){     return{       inputValue:''     }   },   watch:{     inputValue:function(){       console.log(this.inputValue)     }   }, } </script>  <style scoped> .showContent   font-size 32px   letter-spacing 2px .content    margin 10px auto    color blue   font-size 24px </style>
登錄后復制

vue渲染函數使用哪個命令

2.4 靜態插槽

this.$slots的用法

1、父組件

<template>   <div id="app">     <myRender>       <template v-slot:header>         <div >           頭部         </div>       </template>       <template #footer>         <div >           腳部         </div>       </template>     </myRender>   </div> </template>  <script> import myRender from './components/myRender' export default {   components:{     myRender   } } </script>
登錄后復制

2、子組件

<script> export default {   render:function(createElement) {     let childHeader = this.$slots.header     let childFooter = this.$slots.footer     return createElement(       'div',       {         class: 'showContent',         style:{           width:'100%'         }       },       [         createElement('div',{class:'childHeader'},childHeader),         createElement('div',childFooter),       ]     )   }, } </script>  <style scoped> .showContent   letter-spacing 2px   background-color red   .childHeader      color blue     font-size 24px </style>
登錄后復制

vue渲染函數使用哪個命令

2.5 作用域插槽

this.$scopedSlots的用法

1、父組件

<template>   <div id="app">     <myRender :myLayout="layout">       <template slot-scope="childMsg">         <div >           {{childMsg.text}}         </div>       </template>     </myRender>   </div> </template>  <script> import myRender from './components/myRender' export default {    data(){     return{       layout:{         header:'頭部',         footer:'腳部'       }     }   },   components:{     myRender   } } </script>
登錄后復制

2、子組件

<script> export default {   render:function(createElement) {     let self = this     return createElement(       'div',       {         style:{           width:'100%'         },       },[         self.$scopedSlots.default({           text: this.myLayout.header         })       ]     )   },   props:{     myLayout:Object   } } </script>
登錄后復制

vue渲染函數使用哪個命令

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产网红在线_电影频道| 狠狠色丁香婷婷亚洲综合| 国产毛多水多五月激情四射| 国产一国产二国产三国产四国产五| 精品无码人妻被多人侵犯aⅴ| 麻豆国产果冻自制传媒| 欧美熟妇内射深插| 婷婷久久综合九色综合97最多收| 亚洲AV无码成人网站久久精品大 | 好男人网官网在线观看2019| 久久久久久老熟妇人妻av| 欧美人妇做爰XXXⅩ性高| 熟妇高潮一区二区三区| 亚洲VA韩国VA欧美VA| 中文字幕无码免费久久9一区9| 差差差30分钟视频轮滑免费| 国产精品无码无在线观看| 久久精品国产亚洲AV蜜桃AV| 欧洲美女粗暴牲交免费观看| 无码秘 人妻一区二区三区| 亚洲系列精品少妇系列50P| Chinese老女人老熟妇HD| 国产JIZZJIZZ麻豆全部免| 精品人妻一区二区三区曰产乱码| 年轻漂亮的女邻居观看在线视频| 天天躁日日躁狠狠久久| 亚洲综合色婷婷七月丁香| 爸的比老公大两倍儿媳妇叫什么呢 | 欧美1卡2卡3卡4卡免费高清| 调教小奴高潮惩罚PLAY道具| 野花香日本大全免费观看 | 国语对白做受XXXXX在线中国| 麻花豆传媒剧国产MV| 深入浅出TXL金银花讲的什么| 亚洲日韩V无码中文字幕| 菠萝视频高清视频在线7| 加比勒色综合久久| 人妻丰满AV无码中文字幕| 亚洲AV成人片无码| 免费A级毛片无码A∨性按摩| 撒尿特写XXXⅩ| 亚洲熟妇丰满XXXXX国语| 成人免费A级毛片无码片在线播放| 精产国品一二三产品99| 人人爽天天碰狠狠添| 亚洲男人第一AV网站| JAPANESE精品中国少妇| 极品人妻VIDEOSSS人妻| 日本狂喷奶水在线播放212| 亚洲日本一线产区和二线产区区别 | ZOOM另一类ZZO0| 精品国产一区二区三区吸毒| 日本熟妇WWW色视频在线播放| 亚洲一线产区二线产区| 国产AV一二三无码影片| 美国一面亲上边一面膜下边| 性中国妓女毛茸茸视频| 拔萝卜视频免费播放在线观看| 久久国产精品成人影院| 色噜噜久久综合伊人一本| 中国OLDWOMAN老熟妇| 国产做出在线 | 传媒麻豆| 人人妻人人爽日日人人| 亚洲一区二区无码视频| 国产精品久久无码一区| 欧美性色黄大片WWW喷水| 亚洲人成人网站色www小说| 国产成人亚洲精品无码VR| 欧美黑粗大在线观看| 亚洲色欲色欲大片WWW无码| 国产精品久久久久成人| 青青草国产成人A∨| 一面亲上边一面膜的免费| 国产裸体美女永久免费无遮挡| 人妻少妇偷人精品视频| 中国亚州女人69内射少妇| 国内粗鲁VIDEO老熟妇| 少妇厨房愉情理伦片免费 | 国产成人亚洲色成人网站WWW永久四虎| 男生把小j放进女人屁股视频狂躁| 亚洲精品1卡2卡三卡23卡| 国产精品久久久久9999不卡| 秋霞免费理论片在线观看| 有人有在线观看的片资源| 国内揄拍高清国内精品对白 | 亚洲色成人网站WWW永久下载 | 无码少妇一区二区三区视频| 别揉我奶头~嗯~啊~视频在线观| 免费无码AV一区二区| 野花日本视频免费观看3| 精品国产一区二区三区2021| 无码专区AAAAAA免费视频| 丰满人妻妓熟妇又伦精品软件| 欧美性猛交ⅩXXX乱大交| 制服在线无码专区| 久久久精品国产免大香伊 | 好爽又高潮了毛片免费下载| 未满十八18禁止午夜免费网站| 成人奭片免费观看| 人妻无码AⅤ中文字幕系列| 99久久婷婷国产综合精品| 妹妹中考前让我C了1次| 一区二区三区精品视频日本 | 97人妻天天爽夜夜爽二区| 久久亚洲精品无码爱剪辑| 亚洲一区二区自偷自拍另类| 久久99精品久久久久久HB | 特级毛片在线大全免费播放| 成人爽A毛片免费网站| 日本免费一区二区三区最新VR | 啊~CAO死你个小SAO货视频| 女性の乳頭を凸起しています| 中文字幕人成人乱码亚洲影| 看国产一毛片在线看手机看| 国产97色在线 | 免| 成人久久免费网站| 欧美成年黄网站色视频| 在线观看亚洲AV电影网站| 免费无码午夜福利片69| 丰满人妻跪趴高撅肥臀| 人人妻人人澡人人爽欧美一区双| 99久久久国产精品免费| 女人18毛片A级毛片免费视频| 在线看片无码永久免费视频| 久久亚洲色WWW成人图片| 永久免费精品精品永久-夜色| 久热中文字幕无码视频| 野花韩国日本高清免费5| 老师黑色双开真丝旗袍| 中国美女撒尿TXXXX视频| 免费人成无码大片在线观看| 97精品伊人久久大香线蕉APP| 欧美乱码卡1卡2卡三卡四卡| 大香伊蕉AⅤ在人线国产| 日韩在线 | 中文| 国产成人亚洲精品无码影院BT| 玩弄丰满少妇XXXXX| 国产男男猛烈无遮挡A片小说| 亚洲AⅤ优女AV综合久久久| 狠狠色噜噜狠狠狠狠AV| 亚洲一区二区三区日本久久九| 里面也请好好疼爱第三季| 939W78V78W乳液永久W| 人妻丝袜另类欧美偷拍视频| 粉嫩av一区二区精品爆乳| 无码人妻AⅤ一区二区三区夏目| 国产嫖妓风韵犹存对白| 亚洲国产成人精品无码一区二区 | 美女扒开腿让男人桶爽| 99热精国产这里只有精品| 人物动物交互狗AA| 国产精品久久久久久精品电影| 亚洲成AV不卡无码无码不卡| 久久天堂无码AV网站| MD豆传媒一二三区| 私人IMAX情侣影院家庭影院| 国产一二三四2021精字窝| 野花社区免费观看高清在线1日本| 内射人妻视频国内| 城中村快餐嫖老妇对白| 性欧美丰满熟妇XXXX性| 久久久久久午夜成人影院| AV无码一区二区三区| 他扒开内裤把舌头进去会有影响吗 | 97婷婷狠狠成为人免费视频| 色偷偷人人澡人人爽人人模| 国内精品视频一区二区三区 | 欧洲老太太BBBH| 国产成人AV一区二区三区在线观| 亚洲AV最新天堂网址| 免费看30分钟打扑克教程| 性色AV一区二区三区| 菠萝视频高清观看免费6| 亚洲AV成人无码网站不卡| 久热中文字幕无码视频| 成年免费手机毛片免费看无码| 亚洲 日韩 欧美 成人 在线观| 老色鬼久久亚洲AV综合0男男| 超薄丝袜足J好爽在线观看| 亚洲AV无码专区国产乱码DVD | 无码人妻精品一区二区蜜桃视频 | 和岳每晚弄的高潮嗷嗷叫视频| 治愈系恋人 电视剧| 少妇被粗大的猛烈的进出69影院| 精品国产性色无码AV网站| GOGO人体大胆高清啪啪| 午夜免费无码福利视频| 麻豆国产原创视频在线播放| 夫妻二人体验交换夫妻的后果 | 婷婷五月综合色中文字幕| 久久WWW免费人成_网站| 薄荷奶糖(1V2)笔趣| 亚洲丰满少妇XXXXⅩ高潮| 欧美亚洲一区二区三区| 国产思思99RE99在线观看| 中文字幕一线产区和二线| 无套内射GIF舔B吃奶| 欧美黑人XXXXXⅩ| 狠狠色狠狠色综合| 少妇WWB搡BBBB搡BBBB|