vue render函式簡單解析
阿新 • • 發佈:2021-02-05
技術標籤:Vue
平時用render 非常少。當然vue3 對template 模式優化,其速度和render幾乎無異。但是對簡單的元件其實用render模式則更加優雅。
建立一個全屏小元件
template
<template>
<i class="el-icon-full-screen" @click="toggleScreen"></i>
</template>
<script>
const screenfull = require("screenfull" );
export default {
name: "ScreenFull",
methods: {
toggleScreen() {
screenfull.toggle();
}
}
};
</script>
render函式渲染
通過render
函式中的createElement
引數並返回該vnode
。當然其內部還是做了vnode
進行轉換為dom
的過程。
createElement
對於createElement
方法 的引數。官網說的很清楚
/**
* @param {String | Array} tagElement 子級虛擬節點 (VNodes),由 `createElement()` 構建而成,也可以使用字串來生成“文字虛擬節點”。可選。
* @param {Object} data 非必填, 一個與模板中 attribute 對應的資料物件。
* @param {String | Object | Function} tag 必填, 一個 HTML 標籤名、元件選項物件,或者resolve 了上述任何一種的一個 async 函式
*/
createElement(tag, data, tagElement) {}
data
需要注意的是對於data
選項中的on
事件中的click
接受的是一個匿名函式。
如下render
寫法
<script>
const screenfull = require("screenfull");
export default {
name: "ScreenFull",
render(h) {
return h("i", {
class: "el-icon-full-screen" ,
on: {
click: () => {
this.toggleScreen();
}
}
});
},
methods: {
toggleScreen() {
screenfull.toggle();
}
}
};
</script>
千里之行
始於足下