1.重構(gòu)響應(yīng)式系統(tǒng)次酌,使用Proxy替換Object.defineProperty蓖宦,使用Proxy優(yōu)勢(shì):
?可直接監(jiān)聽(tīng)數(shù)組類型的數(shù)據(jù)變化
?監(jiān)聽(tīng)的目標(biāo)為對(duì)象本身,不需要像Object.defineProperty一樣遍歷每個(gè)屬性,有一定的性能提升
?可攔截apply深浮、ownKeys蜻拨、has等13種方法池充,而Object.defineProperty不行
?直接實(shí)現(xiàn)對(duì)象屬性的新增/刪除
2.新增Composition API,更好的邏輯復(fù)用和代碼組織
3.重構(gòu) Virtual DOM
?模板編譯時(shí)的優(yōu)化缎讼,將一些靜態(tài)節(jié)點(diǎn)編譯成常量
?slot優(yōu)化收夸,將slot編譯為lazy函數(shù),將slot的渲染的決定權(quán)交給子組件
?模板中內(nèi)聯(lián)事件的提取并重用(原本每次渲染都重新生成內(nèi)聯(lián)函數(shù))
4.代碼結(jié)構(gòu)調(diào)整血崭,更便于Tree shaking卧惜,使得體積更小
5.使用Typescript替換Flow
為什么要新增Composition API,它能解決什么問(wèn)題夹纫?
Vue2.0中咽瓷,隨著功能的增加,組件變得越來(lái)越復(fù)雜舰讹,越來(lái)越難維護(hù)茅姜,而難以維護(hù)的根本原因是Vue的API設(shè)計(jì)迫使開(kāi)發(fā)者使用watch,computed月匣,methods選項(xiàng)組織代碼钻洒,而不是實(shí)際的業(yè)務(wù)邏輯。
另外Vue2.0缺少一種較為簡(jiǎn)潔的低成本的機(jī)制來(lái)完成邏輯復(fù)用锄开,雖然可以minxis完成邏輯復(fù)用素标,但是當(dāng)mixin變多的時(shí)候,會(huì)使得難以找到對(duì)應(yīng)的data萍悴、computed或者method來(lái)源于哪個(gè)mixin头遭,使得類型推斷難以進(jìn)行。
所以Composition API的出現(xiàn)癣诱,主要是也是為了解決Option API帶來(lái)的問(wèn)題任岸,第一個(gè)是代碼組織問(wèn)題,Compostion API可以讓開(kāi)發(fā)者根據(jù)業(yè)務(wù)邏輯組織自己的代碼狡刘,讓代碼具備更好的可讀性和可擴(kuò)展性享潜,也就是說(shuō)當(dāng)下一個(gè)開(kāi)發(fā)者接觸這一段不是他自己寫(xiě)的代碼時(shí),他可以更好的利用代碼的組織反推出實(shí)際的業(yè)務(wù)邏輯嗅蔬,或者根據(jù)業(yè)務(wù)邏輯更好的理解代碼剑按。
第二個(gè)是實(shí)現(xiàn)代碼的邏輯提取與復(fù)用疾就,當(dāng)然mixin也可以實(shí)現(xiàn)邏輯提取與復(fù)用,但是像前面所說(shuō)的艺蝴,多個(gè)mixin作用在同一個(gè)組件時(shí)猬腰,很難看出property是來(lái)源于哪個(gè)mixin,來(lái)源不清楚猜敢,另外姑荷,多個(gè)mixin的property存在變量命名沖突的風(fēng)險(xiǎn)。而Composition API剛好解決了這兩個(gè)問(wèn)題缩擂。