學習内容:
1)Vue 裡面的 render 函數。
代碼示例:

運作效果:
接着我寫一個小的元件,
app.component,元件的名字叫做比如說 test,裡面我們寫一個template,
然後上面我用這個元件我就不寫hello world了,我直接寫 test反斜杠:
我有這樣的一個功能,或者說我叫title,這個元件叫做我用一個title:
當然這個title和hml裡面的title就重名了,是以肯定是不行的,我們可以給它改成自定義的 mytitle:
裡面我傳一個比如說hello過去,然後我希望 mytitle展示的就是h1:
然後把你傳遞過來的内容展示出來,這塊該怎麼寫?
這塊我是不是直接用slot就可以了:
效果:
假設我 h幾希望能夠受到外部傳遞過來的參數的控制,我可以怎麼寫?
我可以在這傳一個比如說 level 等于這塊加個冒号,讓它傳遞過去的東西是一個數字的,這樣傳是一個數字的,如果你不寫傳的是個字元串:
因為加冒号之後,這會作為一個表達式,它是數字類型的,
如果你不加冒号它是一個字元串,是以這塊大家一定要注意。
那麼接收到這個level之後,我就可以這麼去寫,我可以在這裡去寫一個叫做props,接收誰?
接收level。
然後下面我去做一些判斷,我寫一個h1 slot,這塊我加一個v杠if等于level等于 1:
那麼傳 1 過來的時候level的值等于1,
是以 slot可以展示出來,
假設你傳 2 的時候,我希望它能展示h2,我就這麼寫:
但假設你繼續去寫的話,你得寫好多的東西,比如說一直到h6。一直往下寫,想象一下,如果你通過這樣的一個寫法去展示對應的不同的h幾标簽的話,你這塊的代碼會變得很長,對不對?
遇到這種功能的實作這麼去寫代碼并不是那麼優雅。
怎麼能夠把它寫得更優雅一點?
其實Vue裡面可以讓我們不寫這個模闆,取而代之我們寫一個render函數,
在render函數裡面,首先我要去用 Vue 提供的一個叫做h的函數等于 Vue,
它從 Vue 的類裡面去讀一個h函數,
h函數我們就可以去做一個操作了,我可以這麼去寫。return h函數的傳回值,
h函數的第一個參數,我們可以去寫這個标簽的名字,比如說我現在傳了一個level進來,
我這個标簽名其實就是h加上this點level,
第二個參數接收的是比如說我建立一個h1标簽,比如你傳的level是1,現在我告訴它我要用的是一個h1标簽,
h1 标簽上有沒有一些比如說 name等于123這樣的屬性?
如果有的話你就在這裡寫一個name 冒号123,
現在我們是不需要的,是以給一個空就行了。
第三個參數是一個數組,當然你也可以直接寫一個字元串,比如說我們這裡就寫一個hello world:
我們現在看一下,我把template 删除掉,有一個render函數,
當你傳不同level的時候,我展示的是h對應的level這樣的一個内容,然後沒有屬性,展示的内容都是hello world,
儲存我們到頁面上刷一下,展示的現在是hello world:
你傳的是2,如果傳 1 的話儲存一下:
我們到頁面上刷它是不是就變大了:
當我能看到通過這樣的一個文法去實作的 與 剛才的與template 相類似的這種代碼就變得簡潔了很多,
如果你要用template去實作得寫一大堆,
但是你用這個render函數直接這麼寫:
不管h幾你都能相容了。
但是這塊和template函數稍微有點差別的是什麼?
這塊我寫死了,隻能用hello world,
那麼你現在想用的是slot傳遞過來的 hello,
這塊可以怎麼變動一下?
我這塊可以直接用this點
$slot
,
那在render函數裡面或者說在 Vue 的其他的函數裡面,你通過this點
$slot
能擷取到各種各樣slot相關的内容,
預設的因為你也不是一個具名的插槽,
你的傳遞過來的是hello,然後你這塊也沒有說通過一個具名的插槽,比如name等于什麼的方式來去使用這個具名的插槽,
是以它就是一個預設的插槽,如果要調用預設插槽裡的内容,