簡單介紹
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表現上來看
可以看出vue的star數量已經是前端框架中最火爆的。從維護上來看,react是facebook在維護,而vue現階段雖然也有了團隊,但主要還是尤雨溪在維護貢獻程式碼,並且阿里巴巴開源的混合式框架weex也是基於vue的,所以我們相信vue未來將會得到更多的人和團隊維護。根據不完全統計,包括餓了麼、簡書、高德、稀土掘金、蘇寧易購、美團、天貓、荔枝FM、房多多、Laravel、htmlBurger等國內外知名大公司都在使用vue進行新專案的開發和舊專案的前端重構工作。
使用vue的公司
根據不完全統計,包括餓了麼、蘇寧易購、美團、天貓、Laravel、htmlBurger等國內外知名大公司都在使用vue進行新專案的開發和舊專案的前端重構工作。
使用react的公司
UI生態
react有material-design,螞蟻金服的ant-design等,vue有餓了麼出品的element以及iview等。
總結
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; |
參考文件
- Vue與React兩個框架的區別和優勢對比caibaojian.com/vue-vs-reac…
- Vue.js與React的全面對比 blog.csdn.net/CystalVon/a…