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)。首先,你可能會想到如下實作
{{ text }}