1.所有的組件樹中,如果 VNode 是組件或含有組件的 slot,那么 VNode 必須唯一。 所以下面的 兩個示例都是錯誤的。這該怎么理解
第一個錯誤栗子:
<div id='app'>
<ele></ele>
<div>
var Child = {
render: function (createElement) {
return createElement("p", "text");
}
};
Vue.component("ele", {
render: function (createElement) {
var ChildNode = createElement(Child);
return createElement("div", [
ChildNode ,
ChildNode
]);
}
})
第二個錯誤栗子:
<div id='app'>
<ele>
<div>
<Child></Child>
</div>
</ele>
<div>
Vue.component("Child", {
render: function (createElement) {
return createElement("p", "text");
}
});
Vue.component("ele", {
render: function (createElement) {
var ChildNode = createElement(Child);
return createElement("div", [
this.$slots.default,
this.$slots.default
])
}
})
這兩個栗子說期待渲染兩個Child組件,也就是兩個<p>text</p>節(jié)點,實際上只渲染出一個,因為VNode受到約束。
可是我試過可以渲染出兩個節(jié)點也就是<p>text</p>,不知道它渲染出的一個是怎么說的
渲染是沒問題的, 但這會破壞后續(xù)的更新.
如下這個例子: 在第一次點擊時, 兩個 p 都可以更新, 但第二次以后就只有第二個 p 的內(nèi)容會被更新.
var Child = {
props: {
text: {},
},
render: function(createElement) {
return createElement('p', this.text);
},
};
Vue.component('Child', Child);
Vue.component('ele', {
data() {
return {
text: 'test',
};
},
render: function(createElement) {
var ChildNode = createElement(Child, {
props: { text: this.text },
nativeOn: {
click: () => {
this.text = 'clicked ' + new Date();
},
},
});
return createElement('div', [ChildNode, ChildNode]);
},
});
new Vue({
el: '#app',
template: `
<div id='app'>
<ele />
</div>
`,
});
這是由于 vue 當(dāng)前實現(xiàn)會將 vnode 會與其渲染出來的 dom 元素進(jìn)行一對一關(guān)聯(lián), 當(dāng)你同一個 vnode 渲染兩次后, vnode 最終只會與最后一個渲染出來的 dom 元素關(guān)聯(lián), 所以在 patch 階段只有最后一個 dom 可以被更新.
這實質(zhì)上是 vue 的缺陷, github 已經(jīng)有相關(guān) issue 請求 vue 支持 vnode 復(fù)用, 因為這種使用方式一來很符合直覺, 二來存在實際的使用場景.
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。