欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue與React的區(qū)別和優(yōu)勢對比

 更新時間:2020年12月18日 09:43:12   作者:lucky_qi  
這篇文章主要介紹了Vue與React的區(qū)別和優(yōu)勢對比,幫助大家更好的選擇適合自己的前端框架,迷茫的同學可以進來參考下

簡單介紹

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

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

相似之處

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

  • 兩者都是用于創(chuàng)建UI的JavaScript庫;
  • 兩者都快速輕便;
  • 都有基于組件的架構;
  • 都是用虛擬DOM;
  • 都可放入單個HTML文件中,或者成為更復雜webpack設置中的模塊;
  • 都有獨立但常用的路由器和狀態(tài)管理庫;

它們之間的最大區(qū)別是Vue通常使用HTML模板文件,而React則完全是JavaScript。Vue有雙向綁定語法糖。

不同點

1.監(jiān)聽數據變化的實現原理不同

Vue通過 getter/setter以及一些函數的劫持,能精確知道數據變化。

React默認是通過比較引用的方式(diff)進行的,如果不優(yōu)化可能導致大量不必要的VDOM的重新渲染。為什么React不精確監(jiān)聽數據變化呢?這是因為Vue和React設計理念上的區(qū)別,Vue使用的是可變數據,而React更強調數據的不可變,兩者沒有好壞之分,Vue更加簡單,而React構建大型應用的時候更加魯棒。

2.數據流的不同

Vue1.0中可以實現兩種雙向綁定:父子組件之間,props可以雙向綁定;組件與DOM之間可以通過v-model雙向綁定。Vue2.x中去掉了第一種,也就是父子組件之間不能雙向綁定了(但是提供了一個語法糖自動幫你通過事件的方式修改),并且Vue2.x已經不鼓勵組件對自己的 props進行任何修改了。

React一直不支持雙向綁定,提倡的是單向數據流,稱之為onChange/setState()模式。不過由于我們一般都會用Vuex以及Redux等單向數據流的狀態(tài)管理框架。

3.HoC和mixins

Vue組合不同功能的方式是通過mixin,Vue中組件是一個被包裝的函數,并不簡單的就是我們定義組件的時候傳入的對象或者函數。比如我們定義的模板怎么被編譯的?比如聲明的props怎么接收到的?這些都是vue創(chuàng)建組件實例的時候隱式干的事。由于vue默默幫我們做了這么多事,所以我們自己如果直接把組件的聲明包裝一下,返回一個HoC,那么這個被包裝的組件就無法正常工作了。

React組合不同功能的方式是通過HoC(高階組件)。React最早也是使用mixins的,不過后來他們覺得這種方式對組件侵入太強會導致很多問題,就棄用了mixinx轉而使用HoC。高階組件本質就是高階函數,React的組件是一個純粹的函數,所以高階函數對React來說非常簡單。

4.組件通信的區(qū)別

Vue中有三種方式可以實現組件通信:父組件通過props向子組件傳遞數據或者回調,雖然可以傳遞回調,但是我們一般只傳數據;子組件通過事件向父組件發(fā)送消息;通過V2.2.0中新增的provide/inject來實現父組件向子組件注入數據,可以跨越多個層級。

React中也有對應的三種方式:父組件通過props可以向子組件傳遞數據或者回調;可以通過 context 進行跨層級的通信,這其實和 provide/inject 起到的作用差不多。React 本身并不支持自定義事件,而Vue中子組件向父組件傳遞消息有兩種方式:事件和回調函數,但Vue更傾向于使用事件。在React中我們都是使用回調函數的,這可能是他們二者最大的區(qū)別。

5.模板渲染方式的不同

在表層上,模板的語法不同,React是通過JSX渲染模板。而Vue是通過一種拓展的HTML語法進行渲染,但其實這只是表面現象,畢竟React并不必須依賴JSX。

在深層上,模板的原理不同,這才是他們的本質區(qū)別:React是在組件JS代碼中,通過原生JS實現模板中的常見語法,比如插值,條件,循環(huán)等,都是通過JS語法實現的,更加純粹更加原生。而Vue是在和組件JS代碼分離的單獨的模板中,通過指令來實現的,比如條件語句就需要 v-if 來實現對這一點,這樣的做法顯得有些獨特,會把HTML弄得很亂。

6.渲染過程不同

Vue可以更快地計算出Virtual DOM的差異,這是由于它在渲染過程中,會跟蹤每一個組件的依賴關系,不需要重新渲染整個組件樹。

React在應用的狀態(tài)被改變時,全部子組件都會重新渲染。通過shouldComponentUpdate這個生命周期方法可以進行控制,但Vue將此視為默認的優(yōu)化。

7.框架本質不同

Vue本質是MVVM框架,由MVC發(fā)展而來;

React是前端組件化框架,由后端組件化發(fā)展而來。

8.Vuex和Redux的區(qū)別

從表面上來說,store注入和使用方式有一些區(qū)別。在Vuex中,store被直接注入到了組件實例中,因此可以比較靈活的使用:使用dispatch、commit提交更新,通過mapState或者直接通過this.store被直接注入到了組件實例中,因此可以比較靈活的使用:使用dispatch、commit提交更新,通過mapState或者直接通過this.store來讀取數據。在Redux中,我們每一個組件都需要顯示的用connect把需要的props和dispatch連接起來。另外,Vuex更加靈活一些,組件中既可以dispatch action,也可以commit updates,而Redux中只能進行dispatch,不能直接調用reducer進行修改。

從實現原理上來說,最大的區(qū)別是兩點:Redux使用的是不可變數據,而Vuex的數據是可變的,因此,Redux每次都是用新state替換舊state,而Vuex是直接修改。Redux在檢測數據變化的時候,是通過diff的方式比較差異的,而Vuex其實和Vue的原理一樣,是通過getter/setter來比較的,這兩點的區(qū)別,也是因為React和Vue的設計理念不同。React更偏向于構建穩(wěn)定大型的應用,非常的科班化。相比之下,Vue更偏向于簡單迅速的解決問題,更靈活,不那么嚴格遵循條條框框。因此也會給人一種大型項目用React,小型項目用Vue的感覺。

總結

Vue的優(yōu)勢包括:

  • 模板和渲染函數的彈性選擇
  • 簡單的語法及項目創(chuàng)建
  • 更快的渲染速度和更小的體積

React的優(yōu)勢包括:

  • 更適用于大型應用和更好的可測試性
  • 同時適用于Web端和原生App
  • 更大的生態(tài)圈帶來的更多支持和工具

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

  • 利用虛擬DOM實現快速渲染
  • 輕量級
  • 響應式組件
  • 服務器端渲染
  • 易于集成路由工具,打包工具以及狀態(tài)管理工具
  • 優(yōu)秀的支持和社區(qū)

以上就是Vue與React的區(qū)別和優(yōu)勢對比的詳細內容,更多關于Vue與React的資料請關注腳本之家其它相關文章!

相關文章

  • vue中利用iscroll.js解決pc端滾動問題

    vue中利用iscroll.js解決pc端滾動問題

    這篇文章主要介紹了vue中利用iscroll.js解決pc端滾動問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • vuex頁面刷新后數據丟失的方法

    vuex頁面刷新后數據丟失的方法

    這篇文章主要介紹了vuex頁面刷新后數據丟失的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 大前端代碼重構之事件攔截iOS?Flutter?Vue示例分析

    大前端代碼重構之事件攔截iOS?Flutter?Vue示例分析

    這篇文章主要為大家介紹了大前端代碼重構之事件攔截iOS?Flutter?Vue示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • vue 修改 data 數據問題并實時顯示操作

    vue 修改 data 數據問題并實時顯示操作

    這篇文章主要介紹了vue 修改 data 數據問題并實時顯示操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue中wangEditor的使用及回顯數據獲取焦點的方法

    vue中wangEditor的使用及回顯數據獲取焦點的方法

    最近在寫vue的項目中,遇到一個需求,點擊編輯,顯示彈框,在彈框中的富文本編輯器中編輯自定義文本樣式,可以上傳圖片并回顯。接下來通過本文給大家介紹vue中wangEditor的使用及回顯數據獲取焦點的問題,一起看看吧
    2021-09-09
  • Vue實現Echarts圖表寬高自適應的實踐

    Vue實現Echarts圖表寬高自適應的實踐

    本文主要介紹了Vue實現Echarts圖表寬高自適應的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Vue常用的修飾符的作用詳解

    Vue常用的修飾符的作用詳解

    為了方便大家寫代碼,Vue 給大家提供了很多方便的修飾符,比如我們經常用到的取消冒泡,阻止默認事件等等,這篇文章將給大家分享Vue 中的常用的修飾符
    2022-08-08
  • Nuxt.js實現一個SSR的前端博客的示例代碼

    Nuxt.js實現一個SSR的前端博客的示例代碼

    這篇文章主要介紹了Nuxt.js實現一個SSR的前端博客的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Uniapp設置頁面的背景圖片方法代碼

    Uniapp設置頁面的背景圖片方法代碼

    這篇文章主要給大家介紹了關于Uniapp設置頁面的背景圖片,uni-app中設置背景圖有兩種方式,分別是全局設置和在相應的view內設置背景,文中給出了代碼示例,需要的朋友可以參考下
    2024-03-03
  • Vue學習之Vuex的使用詳解

    Vue學習之Vuex的使用詳解

    這篇文章主要介紹了Vue中的插件:Vuex。本文將圍繞它的優(yōu)缺點、使用場景和示例展開詳細的說明,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-01-01

最新評論