vue render函式 函式元件化

2022-09-17 04:42:15 字數 1576 閱讀 3451

之前建立的錨點標題元件是比較簡單,沒有管理或者監聽任何傳遞給他的狀態,也沒有生命週期方法,它只是乙個接受引數的函式

在這個例子中,我們標記元件為functional,這意味它是無狀態(沒有data),無例項(沒有this上下文)

乙個函式化元件就像這樣:

vue.component('my-component', ,

// props 可選

props:

})注意:在2.3.0之前的版本中,如果乙個函式式元件想要接受props,則props選項是必須的,在2.3.0及以上的版本中,你可以省略props選項,所有元件上的屬性都會被自動解析為props。

元件需要的一切都是通過上下文傳遞的,包括:

在新增functional:true之後,錨點標題元件的render函式之間簡單更新增加context引數,this.$slots.default更新為context.children,之後this.level更新為context.props.level.

因為函式化元件只是乙個函式,所以渲染開銷也低很多。然而,對持久化例項的缺乏也意味著函式化元件不會出現在vue devtools的元件樹里。

在作為包裝元件時它們也非常有用,比如你需要做這些時:

var emptylist =

var tablelist =

var orderedlist =

var unorderedlist =

vue.component('smart-list',

return createelement(

context.data,

context.children)},

props: ,

isordered: boolean}})

slots()和children對比

你可能想知道為什麼同時需要slots()和children。slots().default不是和children類似的嗎?在一些場景中,是這樣,但是如果是函式式元件和下面的這樣的children呢?

first

p>

secondp>

my-functional-component>

對於這個元件,children會給你兩個段落標籤,而slots().default只會傳遞第二個匿名段落標籤,slots().foo會傳遞第乙個具名段落標籤。同時擁有children和slots(),因此你可以選擇讓元件通過slot()系統分發或者簡單的通過children接收,讓其他元件去處理。

模板編譯

你可能有興趣知道,vue的模板實際上是編譯成了render函式。這是乙個實現細節,通常不需要關心,但如果你想看看模板的功能是如何編譯出來的,你會發現非常有趣,下面是乙個使用vue.compile來實時編譯模板字串的簡單demo:

}no message.

render:

function anonymous() 

}

staticrenderfns:

_m(0): function anonymous() 

}

vue render函式解析

寫一些vue.js的template太繁瑣,利用render,可以使用js來生成模板,更加靈活和簡便。官網也說了。在深入渲染函式之前推薦閱讀例項屬性 api因為寫很多render的函式裡面需要呼叫其實例屬性的api.實現效果 目標 點選1的時候使用,下方內容使用h1標題,點選hi 的時候,使用hi的...

vue render 函式理解

感覺render是為補救template缺點而誕生的 vue通過建立乙個虛擬dom對真實dom發生的變化保持追蹤。return createelement h1 hello world createelement 到底會返回什麼呢?其實不是乙個實際的 dom 元素。它更準確的名字是createnod...

Vue render 函式中使用this

1.在render中直接使用this,on裡面click函式不是箭頭函式 使用this需要在父級將this儲存起來才能使用 render h,params params let this this return h div style on this.previewurl row.picture t...