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

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

vue渲染方式render和template的區別

瀏覽:58日期:2023-01-15 14:54:00

render函數詳解

Vue中的Render函數中有一個參數,這個參數是一個函數通常我們叫做h。其實這個h叫做createElement。Render函數將createElement的返回值放到了HTML中

createElement這個函數中有3個參數

第一個參數(必要參數):主要用于提供DOM的html內容,類型可以是字符串、對象或函數

第二個參數(類型是對象,可選):用于設置這個DOM的一些樣式、屬性、傳的組件的參數、綁定事件之類

第三個參數(類型是數組,數組元素類型是VNode,可選):主要是指該結點下還有其他結點,用于設置分發的內容,包括新增的其他組件。注意,組件樹中的所有VNode必須是唯一的

// @return {VNode}createElement( // {String | Object | Function} // 一個HTML標簽字符串,組件選項對象,或者一個返回值類型為String/Object的函數。該參數是必須的 ’div’, // {Object} // 一個包含模板相關屬性的數據對象,這樣我們可以在template中使用這些屬性,該參數是可選的。{ attrs: { name: headingId, href: ’#’+headingId }, style: { color: ’red’, fontSize: ’20px’ }, ’class’: { foo: true, bar: false }, // DOM屬性 domProps: { innerHTML: ’baz’ }, // 組件props props: { myProp: ’bar’ }, // 事件監聽基于 ’on’ // 所以不再支持如 ’v-on:keyup.enter’ 修飾語 // 需要手動匹配 KeyCode on: { click: function(event) {event.preventDefault();console.log(111); } } } // {String | Array} // 子節點(VNodes)由 createElement() 構建而成。可選參數 // 或簡單的使用字符串來生成的 '文本節點'。[ ’xxxx’, createElement(’h1’, ’一則頭條’), createElement(MyComponent, { props: { someProp: ’xxx’ } }), this.$slots.default])

什么時候用render函數?

假設我們要封裝一套按鈕組件,按鈕有四個樣式(success、error、warning、default)。首先,你可能會想到如下實現

<template><divclass='btn btn-success'v-if='type === ’success’'>{{ text }}</div><divclass='btn btn-danger'v-else-if='type === ’danger’'>{{ text }}</div><divclass='btn btn-warning'v-else-if='type === ’warning’'>{{ text }}</div></template>

雖然我們這樣實現沒有問題,但是如果現在有十幾個樣式的情況下我們就需要寫N多個判斷,如果遇到了這種情況我們就可以選擇使用render函數。

其實簡單的來說就是template適合簡單的組件封裝,然后render函數適合復雜的組件封裝

<script>Vue.component('A-button', { props: { type: {type: String,default: ’default’ }, text: {type: String,default: ’按鈕’ } }, computed: { tag() {switch(this.type) { case’success’: return1; case’danger’: return2; case’warning’: return3; default: return1; } } }, render(h) { returnh(’div’, {class: { btn: true, ’btn-success’: this.type===’success’, ’btn-danger’: this.type===’danger’, ’btn-warning’: this.type===’warning’ },domProps: { //innerText: this.text, },on: { click: this.handleClick } }, this.$slots.default ); }, methods: { handleClick() {console.log(’-----------------------’);console.log(’li’); } } }) letvm=newVue({ el: '#app' })</script>

template與render函數對比

template----html的方式做渲染render----js的方式做渲染

render(提供)是一種編譯方式render里有一個函數h,這個h的作用是將單文件組件進行虛擬DOM的創建,然后再通過render進行解析。h就是createElement()方法:createElement(標簽名稱,屬性配置,children)

template也是一種編譯方式,但是template最終還是要通過render的方式再次進行編譯。

區別:1、render渲染方式可以讓我們將js發揮到極致,因為render的方式其實是通過createElement()進行虛擬DOM的創建。邏輯性比較強,適合復雜的組件封裝。2、template是類似于html一樣的模板來進行組件的封裝。3、render的性能比template的性能好很多4、render函數優先級大于template

案例一:template和render的方式渲染標題標簽:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title></head><body> <div id='app'> <h-title level='1'>標題</h-title> <h-title level='2'>標題</h-title> <h-title level='3'>標題</h-title> </div> <script src='https://unpkg.com/vue/dist/vue.js'></script> <script> Vue.component('h-title',{ /* template渲染 */ // template:` // <div> // <h1 v-if='level==1'><slot></slot></h1>// <h2 v-else-if='level==2'><slot></slot></h2>// <h3 v-else-if='level==3'><slot></slot></h3>// </div> // `, /* render渲染 */ render:function(h){// createElement(標簽名稱,屬性配置,children)return h('h'+this.level, { attrs:{ 'data-id':10 } }, // 相當于<slot></slot>標簽接收 this.$slots.default) }, props:{level:{ type:String} } }); let vm=new Vue({ el:'#app' }); </script></body></html>

案例二:render方式模擬button:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, initial-scale=1.0'> <title>Document</title> <style> *{margin: 0;padding: 0;} .btn{ width: 80px; line-height: 40px; text-align: center; color:#fff; border-radius: 5px; background-color: #ccc; } .success{background-color: green;} .error{background-color: red;} .info{background-color: pink;} </style></head><body> <div id='app'> <wql-button type='success'>成功</wql-button> <wql-button type='info'>提示</wql-button> <wql-button type='error'>報錯</wql-button> <wql-button>默認</wql-button> </div> <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js'></script> <script> Vue.component('wql-button',{ render:function(h){return h('div',{ class:{ btn:true, success:this.type=='success', error:this.type=='error', info:this.type=='info' }},this.$slots.default); }, props:{type:{ type:String} } }); let vm=new Vue({ el:'#app' }); </script></body></html>

到此這篇關于vue渲染方式render和template的區別的文章就介紹到這了,更多相關vue render template區別內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品一级中文字幕精品视频免费观看 | 国产情侣久久| 欧美资源在线| 综合激情一区| 国产精品第一国产精品| 国产乱码午夜在线视频| 久久免费黄色| 亚洲一区久久| 69精品国产久热在线观看| 欧美影院精品| 青青在线精品| 老司机精品视频网| 欧美精选一区二区三区| 日本一不卡视频| 国产一区二区三区精品在线观看| 亚洲免费成人| 久久永久免费| 日本久久黄色| 91久久精品无嫩草影院| 国产调教精品| 国产精品婷婷| 亚洲精品进入| 色爱av综合网| 欧美一级一区| 国产精东传媒成人av电影| 精品久久在线| 日韩区一区二| 国产精品一区二区美女视频免费看| 欧美精品不卡| 日本久久成人网| 丝袜美腿亚洲一区二区图片| 亚洲三级国产| 麻豆传媒一区二区三区| 电影天堂国产精品| 久久夜色精品| 国产精品a级| 久久精品欧美一区| 亚洲精品韩国| 国产精品成人3p一区二区三区| 岛国av在线播放| 性色一区二区| 嫩草伊人久久精品少妇av杨幂 | 国产视频网站一区二区三区| 91亚洲国产高清| 亚洲一区二区毛片| 国产精品hd| 日韩一级网站| 精品视频在线观看网站| 黄色亚洲免费| 久久av导航| 在线亚洲成人| 精品日韩一区| 国产一区二区三区自拍| 日产精品一区二区| 五月天久久久| 国产精品红桃| 国产亚洲精品自拍| 激情综合婷婷| 老司机久久99久久精品播放免费| 嫩呦国产一区二区三区av| 国产精品7m凸凹视频分类| 欧美日韩午夜电影网| 视频福利一区| 国产精品一区二区三区美女| 亚洲二区免费| 免费在线亚洲欧美| 免费看欧美美女黄的网站| 九九九精品视频| 水野朝阳av一区二区三区| 三上亚洲一区二区| 日本电影久久久| 欧美精品一区二区三区精品| 久久精品国产一区二区| 亚洲三级网址| 午夜欧美在线| 中文字幕人成乱码在线观看| 日本视频一区二区| 日韩亚洲精品在线| 日韩不卡免费高清视频| 国产精品久久久久77777丨| 久久午夜精品一区二区| 欧美天堂视频| 高清av一区| 午夜亚洲一区| 日韩精品首页| 精品视频高潮| 欧美专区一区| 亚洲一级淫片| 不卡av一区二区| 日韩一区三区| 卡一卡二国产精品| 日韩高清二区| 日韩精品一二三四| 日韩视频二区| 久久精品国产www456c0m| 捆绑调教美女网站视频一区| 日韩精品导航| 丝袜a∨在线一区二区三区不卡| 91精品推荐| 日韩欧美中文| 日产精品一区二区| 精品美女视频| 免费在线亚洲| 欧美国产先锋| 欧美国产三级| 欧美日韩xxxx| 欧美日韩中出| 日韩不卡手机在线v区| 免费观看久久久4p| 国产精品日本| 亚洲综合三区| 免费视频久久| 一区久久精品| 欧美在线资源| 日韩午夜电影| 亚洲专区在线| 亚洲欧美日韩综合国产aⅴ| 亚洲激情偷拍| 免费成人性网站| 亚洲综合福利| 日本中文字幕不卡| 青青伊人久久| 国产精品1区在线| 精品久久不卡| 日韩电影二区| 欧美日韩精品在线一区| 激情欧美国产欧美| 91精品啪在线观看国产18 | 欧美中文一区二区| 国产高清久久| 国产一区二区高清| 久久午夜精品| 日韩高清三区| 欧美日韩一区自拍| 久久中文在线| 日韩久久一区二区三区| 国产91一区| 日韩视频在线一区二区三区 | 一本色道精品久久一区二区三区| 九九在线精品| 老鸭窝毛片一区二区三区| 蜜臀精品一区二区三区在线观看 | 免费在线日韩av| 黄色在线网站噜噜噜| 亚洲黄色网址| av亚洲免费| 亚洲综合中文| 国产精品草草| 欧美成人基地| 久久亚洲电影| 国产伦精品一区二区三区千人斩| 国产欧美另类| 福利精品在线| 免费视频亚洲| 日韩三区四区| 国产不卡人人| 亚洲免费影视| 国产精品久久亚洲不卡| 日韩深夜视频| 亚洲欧美不卡| 国产精品毛片久久久| 91tv亚洲精品香蕉国产一区| 三级亚洲高清视频| 久久av影视| 91成人超碰| 91综合久久爱com| 老司机精品视频在线播放| 天堂日韩电影| 日本亚洲不卡| 色爱综合网欧美| 亚洲一区二区三区四区五区午夜| 欧美日韩亚洲一区三区| 日韩福利一区| 美日韩精品视频| 欧美1区2区3| 制服诱惑一区二区| 国产精品videosex极品| 亚洲网站视频| 国产欧美激情| 欧美午夜精彩| 国产欧美丝祙| 精品一区毛片| 欧美aaaaaa午夜精品| 久久高清国产| 日韩国产欧美一区二区| 亚洲开心激情| 偷拍精品精品一区二区三区| 综合精品一区| 999国产精品999久久久久久| 91大神在线观看线路一区| 91精品一区二区三区综合| 欧美日韩一区二区三区四区在线观看 | 日韩国产精品久久久久久亚洲| 麻豆成全视频免费观看在线看| 久久亚洲欧洲| 午夜精品久久久久久久久久蜜桃| 欧美在线首页| 99国产精品自拍| 国产高潮在线| 国产亚洲一区二区三区不卡|