天天學習一個vue知識點呀html
咱們將這樣的組件標記爲functional:vue
{
functional: true,
// Props 是可選的
props: {
// ...
},
// 爲了彌補缺乏的實例
// 提供第二個參數做爲上下文
render: function (createElement, context) {
// ...
}
}
複製代碼
組件須要的一切都是經過 context 參數傳遞,它是一個包含以下字段的對象:數組
程序化地在多個組件中選擇一個來代爲渲染;app
在將 children、props、data 傳遞給子組件以前操做它們; 下面是一個 smart-list 組件的例子,它能根據傳入 prop 的值來代爲渲染更具體的組件:ide
var EmptyList = { /* ... */ }
var TableList = { /* ... */ }
var OrderedList = { /* ... */ }
var UnorderedList = { /* ... */ }
Vue.component('smart-list', {
functional: true,
props: {
items: {
type: Array,
required: true
},
isOrdered: Boolean
},
render: function (createElement, context) {
function appropriateListComponent () {
var items = context.props.items
if (items.length === 0) return EmptyList
if (typeof items[0] === 'object') return TableList
if (context.props.isOrdered) return OrderedList
return UnorderedList
}
return createElement(
appropriateListComponent(),
context.data,
context.children
)
}
})
複製代碼
分析:函數
從字面意思顯而易見:學習
children,能夠獲取當前組件節點的全部的子節點;ui
slots()函數返回了全部的插槽對象; 舉例:this
<my-functional-component>
<p v-slot:foo>
first
</p>
<p>second</p>
</my-functional-component>
複製代碼
對於以上示例組件:spa
總結: