Vue與React兩個框架的粗略區別對比

kungggyoyoyo發表於2018-12-18

image

簡單介紹

React--Facebook建立的JavaScript UI框架。它支撐著包括Instagram在內的大多數Facebook網站。React與當時流行的jQuery,Backbone.js和Angular 1等框架不同,它的誕生改變了JavaScript的世界。其中最大的變化是React推廣了Virtual DOM(虛擬DOM)並創造了新的語法——JSX,JSX允許開發者在JavaScript中書寫HTML(譯者注:即HTML in JavaScript)。

Vue致力解決的問題與React一致,但卻提供了另外一套解決方案。Vue使用模板系統(弱化的jsx),使其對現有應用的升級更加容易。這是因為模板用的就是普通的HTML,通過Vue來整合現有的系統是比較容易的,不需要整體重構。同時Vue的學習曲線相對react來說更加容易。

相似之處

React與Vue有很多相似之處,如他們都是JavaScript的UI框架,專注於創造前端的富應用。不同於早期的JavaScript框架“功能齊全”,Reat與Vue只有框架的骨架,其他的功能如路由、狀態管理等是框架分離的元件。

  • 兩者都是用於建立UI的JavaScript庫;
  • 兩者都快速輕便;
  • 都有基於元件的架構;
  • 都是用虛擬DOM;
  • 都可放入單個HTML檔案中,或者成為更復雜webpack設定中的模組;
  • 都有獨立但常用的路由器和狀態管理庫;

它們之間的最大區別是Vue通常使用HTML模板檔案,而React則完全是JavaScript。Vue有雙向繫結語法糖。

不同點

在Vue元件中,有幾個觀念和React相差比較大,我覺得主要有以下這幾點:

  • Vue元件分為全域性註冊和區域性註冊,在react中都是通過import相應元件,然後模版中引用;

  • props是可以動態變化的,子元件也實時更新,在react中官方建議props要像純函式那樣,輸入輸出一致對應,而且不太建議通過props來更改檢視;

  • 子元件一般要顯示地呼叫props選項來宣告它期待獲得的資料。而在react中不必需,另兩者都有props校驗機制;

  • 每個Vue例項都實現了事件介面,方便父子元件通訊,小型專案中不需要引入狀態管理機制,而react必需自己實現;

  • 使用插槽分發內容,使得可以混合父元件的內容與子元件自己的模板;

  • 多了指令系統,讓模版可以實現更豐富的功能,而React只能使用JSX語法;

  • Vue增加的語法糖computed和watch,而在React中需要自己寫一套邏輯來實現;

  • react的思路是all in js,通過js來生成html,所以設計了jsx,還有通過js來操作css,社群的styled-component、jss等;而 vue是把html,css,js組合到一起,用各自的處理方式,vue有單檔案元件,可以把html、css、js寫到一個檔案中,html提供了模板引擎來處理。

  • react做的事情很少,很多都交給社群去做,vue很多東西都是內建的,寫起來確實方便一些, 比如 redux的combineReducer就對應vuex的modules, 比如reselect就對應vuex的getter和vue元件的computed, vuex的mutation是直接改變的原始資料,而redux的reducer是返回一個全新的state,所以redux結合immutable來優化效能,vue不需要。

  • react是整體的思路的就是函式式,所以推崇純元件,資料不可變,單向資料流,當然需要雙向的地方也可以做到,比如結合redux-form,元件的橫向拆分一般是通過高階元件。而vue是資料可變的,雙向繫結,宣告式的寫法,vue元件的橫向拆分很多情況下用mixin。

社群活躍度

從兩者的github表現上來看

react

vue

可以看出vue的star數量已經是前端框架中最火爆的。從維護上來看,react是facebook在維護,而vue現階段雖然也有了團隊,但主要還是尤雨溪在維護貢獻程式碼,並且阿里巴巴開源的混合式框架weex也是基於vue的,所以我們相信vue未來將會得到更多的人和團隊維護。根據不完全統計,包括餓了麼、簡書、高德、稀土掘金、蘇寧易購、美團、天貓、荔枝FM、房多多、Laravel、htmlBurger等國內外知名大公司都在使用vue進行新專案的開發和舊專案的前端重構工作。

使用vue的公司

根據不完全統計,包括餓了麼、蘇寧易購、美團、天貓、Laravel、htmlBurger等國內外知名大公司都在使用vue進行新專案的開發和舊專案的前端重構工作。

使用react的公司

image

UI生態

react有material-design,螞蟻金服的ant-design等,vue有餓了麼出品的element以及iview等。

image

image

總結

Vue的優勢包括:

  • 模板和渲染函式的彈性選擇
  • 簡單的語法及專案建立
  • 更快的渲染速度和更小的體積

React的優勢包括:

  • 更適用於大型應用和更好的可測試性
  • 同時適用於Web端和原生App
  • 更大的生態圈帶來的更多支援和工具

而實際上,React和Vue都是非常優秀的框架,它們之間的相似之處多過不同之處,並且它們大部分最棒的功能是相通的:

  • 利用虛擬DOM實現快速渲染
  • 輕量級
  • 響應式元件
  • 伺服器端渲染
  • 易於整合路由工具,打包工具以及狀態管理工具
  • 優秀的支援和社群

總結比較速覽

特點 VUE React
元件引用 分為全域性註冊和區域性註冊。 通過import相應元件,然後模版中引用。
資料流 1.父元件通過傳遞props來更新子元件檢視,顯示地呼叫props選項來宣告它期待獲得的資料。
2.vue是資料可變的,雙向繫結,宣告式的寫法,vue元件的橫向拆分很多情況下用mixin。
1.官方建議props要像純函式那樣,輸入輸出一致對應,而且不太建議通過props來更改檢視。
2.react是整體的思路的就是函式式,所以推崇純元件,資料不可變,單向資料流,當然需要雙向的地方也可以做到,比如結合redux-form,元件的橫向拆分一般是通過高階元件。
模版 把html,css,js組合到一起,用各自的處理方式,vue有單檔案元件,可以把html、css、js寫到一個檔案中,html提供了模板引擎來處理。 all in js,通過js來生成html,所以設計了jsx,還有通過js來操作css,社群的styled-component、js等。
事件 1.每個Vue例項都實現了事件介面,方便父子元件通訊,小型專案中不需要引入狀態管理機制。
2.Vue增加的語法糖computed和watch。
1.必須自己實現事件。
2.只能使用JSX語法寫一套邏輯來實現。
狀態管理 1.state物件並不是必須的,資料由data屬性在Vue物件中進行管理。
2.非父子元件之間巢狀過深的時候狀態管理可引用vuex。
1.在react中是關鍵的概念,它是不可變的,在React中你需要使用setState()方法去更新狀態。
2.非父子元件之間巢狀過深的時候狀態管理可引用react-redux。
維護 由google前員工尤雨溪個人維護。 由facebook維護。
學習曲線 學習曲線平緩,內部封裝很多語法糖 學習曲線稍複雜,更靈活
普及程度 截止到2018年10月29日 Github star 117604。 截止到2018年10月29日 Github star 114275。
使用場景 1.高階web單頁面;
2.APP混合開發(阿里開源weex);
3.微信小程式開發(美團開源mpvue、網易考拉開源megalo);
4.結合electron開發桌面程式。
1.高階web頁面;
2.APP混合開發(facebook開源react-native);
3.微信小程式(京東開源taro);
4.可結合electron開發桌面程式。
使用公司 根據不完全統計,包括餓了麼、蘇寧易購、美團、天貓、Laravel、htmlBurger等國內外知名大公司都在使用vue進行新專案的開發和舊專案的前端重構工作。 螞蟻金服、阿里巴巴、騰訊、百度、美團、滴滴、餓了麼、京東、網易等。
UI生態 1.pc端:iview、element等;
2.h5端:有贊vant、mintui等;
3.混合開發:weexui,bui-weex;
4.微信小程式:iView Weapp、zanui;
1.pc端:Ant Design、Material-UI等;
2.h5端:Ant Design Mobile、weui等;
3.混合開發:teaset,react-native-elements;
4.微信小程式:iView Weapp、Taro UI;

參考文件

相關文章