前段時間,有一件事在開發(fā)者圈中引起了不小的討論,那就是Vue是不是從React抄襲了一些東西。這個話題一出來,立馬引起了一大堆劍拔弩張的辯論。
首先,我們來看看Vue和React之間有哪些相似之處。Vue采用了React中的Virtual DOM,虛擬DOM是一個內(nèi)存中的快照,用來表示當前的頁面狀態(tài),任何改動都是在這個快照上進行的,最終比較快照的差異進行DOM操作。其次,Vue與React都是組件化的框架,組件化可以讓代碼更加清晰簡潔,易于維護。另外,兩者也都支持響應式數(shù)據(jù)綁定。
Vue.component('my-component', { template: '<div>Hello World!</div>' }); new Vue({ el: '#example' })
但是,要說Vue是直接從React抄襲的,卻又不盡然。Vue的作者尤雨溪在多次采訪中明確表示,Vue的靈感來源于AngularJS和React等多個框架。Vue的模板語法借鑒了AngularJS,而雙向數(shù)據(jù)綁定思想則是來自于React。
再者,從歷史上看,React發(fā)明虛擬DOM的時間早于Vue。React的出現(xiàn)充分證明了虛擬DOM的優(yōu)越性,而Vue也不可能無視React的成功經(jīng)驗,因此借鑒React的虛擬DOM并非完全是抄襲。更何況,虛擬DOM在Vue中的實現(xiàn)和React還是有所不同的。
// React定義虛擬DOM const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, world!' ); // Vue定義虛擬DOM const divElement = h('div', 'Hello World!');
此外,Vue也有很多自己的創(chuàng)新之處。比如,Vue的指令更加強大,也更加簡潔明了。同時,Vue還在性能方面作出了很多優(yōu)化,如keep-alive緩存組件實例、功能強大的過渡系統(tǒng)等等。
總的來說,Vue和React之間的相似之處是無法否認的。但是,要說Vue完全是抄襲React而來,則是過于簡單化了。Vue與React都是開源框架,任何人都可以查看其源碼,相似之處也是有可能是雙方由于面對的問題相同而產(chǎn)生的。因此,把Vue說成是從React抄襲而來,恐怕是有些言過其實了。