Vue render函數(shù)使用詳細(xì)講解
Dom
在瀏覽器中通過js來操作DOM的操作性能很差,于是虛擬Dom應(yīng)運(yùn)而生。虛擬Dom就是在js中模擬DOM對(duì)象樹來優(yōu)化DOM操作的一種技術(shù)或思路。
虛擬DOM并不是真正意義上的DOM,它作為一個(gè)輕量級(jí)的JavaScript對(duì)象,在狀態(tài)發(fā)生變化時(shí),會(huì)進(jìn)行Diff運(yùn)算,來更新發(fā)生變化的DOM,對(duì)于未發(fā)生變化的DOM節(jié)點(diǎn),不予操作,由于不是全部重繪,大大提高更新渲染性能。
什么是render函數(shù)
在vue中我們使用模板HTML語法組建頁面,通過render函數(shù)用js語言來構(gòu)建DOM。
因?yàn)関ue是虛擬DOM,所以在拿到template模板時(shí)也要轉(zhuǎn)譯成VNode的函數(shù),而用render函數(shù)構(gòu)建DOM,vue就免去了轉(zhuǎn)譯的過程。
render函數(shù)構(gòu)建DOM需要用到vue提供的工具createElement函數(shù),約定簡寫h。
render函數(shù)的返回值(VNode)
VNode(即:虛擬節(jié)點(diǎn)),也就是我們要渲染的節(jié)點(diǎn)。
template與render
Template適合邏輯簡單,render適合復(fù)雜邏輯。render的性能較高,template性能較低。
當(dāng)存在template與render時(shí),優(yōu)先展示template(render不展示)
<template> <div>gggg</div> </template> ... render() { return <div>我收到的</div>; }
簡單的render函數(shù)
render:(h) => { return h('div',{ //給div綁定value屬性 props: { value:'' }, //給div綁定樣式 staticStyle:{ width:'30px' }, //給div綁定點(diǎn)擊事件 on: { click: () => { console.log('點(diǎn)擊事件') } }, }) }
ts-vue的寫法
render() { return this.$createElement('div', { on: { ...this.$listeners, click: event => { console.log(event); }, }, props: this.props || {value:''}, attrs: { businessId: this.field.pkId, }, style: { width:'30px' } }); }
render() { return ( <thead> <tr class="ant-table-thead--extra"> {this.title} </tr> {this.$slots.default} </thead> ); }
循環(huán)構(gòu)建:
render() { return ( <ACheckboxGroup class="checkbox-list" value={this.value.map(item => item.id)} > {this.dataList.map(item => ( <ACheckbox key={item.id} checked={this.checked(item)} value={item.id} onChange={$event => this.handleChange($event, item)} > {item.name} </ACheckbox> ))} </ACheckboxGroup> ); }
分開定義引用:
render() { const triggerAction = ( <div class="button-list-content--item"> <span>{this.$t(TriggerActionNameEnum[this.value.triggerAction])}</span> </div> ); const formName = ( <div class="button-list-content--item"> <span>{this.value?.triggerData?.formName || ''}</span> </div> ); const updateFields = ( <div class="button-list-content--item"> <span class="button-list-content--field" title={this.updateFieldName}> {this.updateFieldName} </span> </div> ); return this.value.triggerAction === TriggerActionEnum.UPDATE ? ( <div> {triggerAction} {updateFields} </div> ) : ( <div> {triggerAction} {formName} </div> ); }
動(dòng)態(tài)綁定
render() { const { setting } = this.data; return ( <div class={this.$style.item}> <FormCardStyle silhouette={true} type={setting.template} /> </div> ); }
什么時(shí)候使用Render
自定義組件的時(shí)候。
<script> import { Component, Prop, Vue } from 'vue-property-decorator'; @Component() class Wrap extends Vue { render() { return <div>自定義組件A</div> } } @Component() export default class FormTableActionBar extends Vue { ... render() { return ( <div> <p>下面是自定義組件A</p> <Wrap></Wrap> </div> ) } } </script>
到此這篇關(guān)于Vue render函數(shù)使用詳細(xì)講解的文章就介紹到這了,更多相關(guān)Vue render函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3通過render函數(shù)實(shí)現(xiàn)菜單下拉框的示例
- vue中的render函數(shù)、h()函數(shù)、函數(shù)式組件詳解
- Vue中render函數(shù)調(diào)用時(shí)機(jī)與執(zhí)行細(xì)節(jié)源碼分析
- 簡單談一談Vue中render函數(shù)
- vue中使用render封裝一個(gè)select組件
- Vue 2閱讀理解之initRender與callHook組件詳解
- vue語法之render函數(shù)和jsx的基本使用
- vue3中的render函數(shù)里定義插槽和使用插槽
- VUE3中h()函數(shù)和createVNode()函數(shù)的使用解讀
- Vue.js3.2的vnode部分優(yōu)化升級(jí)使用示例詳解
- Vue.js之VNode的使用
- vue中?render?函數(shù)功能與原理分析
相關(guān)文章
vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題
這篇文章主要介紹了vue在antDesign框架或elementUI框架組件native事件中觸發(fā)2次問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04React?Diff算法不采用Vue的雙端對(duì)比原因詳解
這篇文章主要介紹了React?Diff算法不采用Vue雙端對(duì)比算法原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07vue中使用echarts并根據(jù)選擇條件動(dòng)態(tài)展示echarts圖表
雖然老早就看過很多echarts的例子, 但自己接觸的項(xiàng)目中一直都沒有真正用到過,直到最近才開始真正使用,下面這篇文章主要給大家介紹了關(guān)于vue中使用echarts并根據(jù)選擇條件動(dòng)態(tài)展示echarts圖表的相關(guān)資料,需要的朋友可以參考下2023-12-12ElementUI下拉組件el-select一次從后端獲取選項(xiàng)并設(shè)置默認(rèn)值方式
這篇文章主要介紹了ElementUI下拉組件el-select一次從后端獲取選項(xiàng)并設(shè)置默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Vue兩個(gè)同級(jí)組件傳值實(shí)現(xiàn)
Vue組件之間是有聯(lián)系的,避免不了組件之間要互相傳值,那么如何實(shí)現(xiàn)Vue兩個(gè)同級(jí)組件傳值,本文就來介紹一下,感興趣的可以了解一下2021-07-07