衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于“React和Vue該用哪個”

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-10 10:15 ? 次閱讀

一、前言:我全都要

面對當今前端界兩座大山一樣的主流框架,React 和 Vue,相信很多小伙伴都或多或少都產生過這樣疑問,而這樣的問題也往往很讓人頭疼和猶豫不決:

  1. 業務場景中是不是團隊用什么我就用什么?
  2. 如果選擇了其中一個使用,那為什么不用另一個?
  3. 這兩個框架各有什么優點和無法解決的問題?
  4. 最新版本的 Vue3 已經出了一段時間了,我要不要做組內第一個吃螃蟹的勇士?
  5. 我該依據什么樣的因素決定使用哪個技術棧?

以上問題如果想不明白,很容易產生一個 “算了不想了真麻煩,還是隨大流好了,至少不會出錯” 的答案,其實種種疑問都指向了一個終極問題,那就是關于技術棧的選型 。而技術棧選擇的合適與否,往往對項目后續的開發有著極大的影響,甚至關系到業務落地的效率和效果。僅僅掌握業務邏輯的開發,已經完全不能滿足個人發展了, 就好比一門武林絕學,招式用的再熟,也需要心法輔佐,所以也就引出了本文的主題:

  1. 旨在幫助那些對技術棧選擇困難癥的同學,并對 React 和 Vue 產生一定的認知
  2. 同時也適合那些只了解單一技術棧的小伙伴,可以拓展一下對不同框架的理解

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二、正文:到底要啥

本文不會從正面回答上面列出的問題,技術棧的選擇往往要依據現實情況從多方面考慮,所以我也將從以下幾個方面分別闡述觀點,各位讀者可以結合自身情況和以下觀點,決定 React 和 Vue 到底要用哪一個。而其實關于技術選型,很容易代入自己的主觀意識,“好和壞” 在同樣優秀的框架面前更像是一種自我感受 ,但筆者會盡量從客觀的角度去闡述,如果過程中觀點出現沖突或有誤,歡迎與我交流、指正。

  • 選型對象說明
  • 團隊的適用性
  • 兼容性要求
  • 使用層面對比
  • 周邊配套
  • 跨端處理
  • 設計思路
  • 性能對比
  • 心智模型
  • 社區生態
  • 開源代碼許可協議

1. 選型對象說明

對比對象:React(hooks 版本)、Vue2、Vue3

關于對比對象的選擇:

  • React 有函數式組件的和類組件兩種寫法,鑒于 class 寫法較老,且這種寫法不利于構建工具的 Tree-shaking ,可能導致構建產物體積增加,而函數式組件的 hooks 寫法更符合未來的潮流 , 所以類組件在此也不做詳細的介紹,只選取函數式組件寫法的 React 作為對比對象。
  • Vue2 相較 Vue3 版本而言牢牢占據著大部分 Vue 開發者的視野,但是因為 Vue 官方已經把 Vue3 作為默認的版本,所以在此同時把 Vue2 和 Vue3 作為對比對象。
  • 對比的內容不會涉及到具體的某個 API 的實現,也不會講解大篇幅干澀的源碼,過于詳細的內容不是本文的重點,作為技術選型要從整體出發去考慮。

2. 團隊的適用性

在這方面,其實選哪個框架取決于團隊全體成員

  • 歷史原因:如果你是以開發者的身份剛入職到一個新的環境,并且接手的是一個成熟的項目,處于正常迭代或者維護周期,那千萬不要想著顛覆團隊已有技術棧,技術棧切換就相當于重構 。而這種重構面臨的首要影響就是投入和產出不成正比,相信文章的讀者大多也都是撲在各個業務一線上,對業務方來說,采用什么樣的技術去實現他們并不關心,并且切換技術棧帶來的風險、開發人力和測試回歸的成本都難以評估,除非帶來巨大價值,否則這也是與我們合作的上下游都難以接受的。
  • 團隊習慣:如果你是項目負責人,在拋開對框架本身進行對比的同時,要考慮的是團隊成員對技術棧的熟悉程度,在大多數人都對某一項技術棧熟悉、而對另一項技術了解不深的情況下,那更為熟悉的技術棧帶來的人效和產出質量,顯然能幫助業務快速驗證和試錯。

注意 :不熟悉某項技術,絕不能成為不使用這項技術的托詞,從個人提升的角度考慮,學習新的技術棧可以幫助我們擴充思路和視野,如果要做的新項目 周期不緊張,也預留了充足的時間,那么新的技術顯然可以作為備選項之一。

3. 兼容性要求

  • PC 端:React 和 Vue 均不支持 IE8,對于個別瀏覽器兼容模式使用 IE 內核也可能是不支持的,具體要看使用的內核版本(IE 瀏覽器簡直是前端界的噩夢),其他瀏覽器下可以放心大膽地使用了。
  • H5 端:React 和 Vue 2.x 均能使用。

注意 :在移動端對于想要嘗鮮 Vue 3.x 版本的同學來說要關注一下,Vue 3.x 依賴收集是使用 Proxy 這個 API,而 Proxy 在 IOS 端最低支持 IOS10 版本,并且由于這個 API 具備更底層的對象監聽能力,導致 polyfill 無法完全兼容,已實現的 polyfill 都是基于 Object.defineProperty,并不能完整支持 Proxy 所有特性(比如數組長度的監測),所以如果業務環境對 IOS9 有兼容需求的情況下,就不要嘗試了。

4. 使用層面對比

框架引入

  • React 和 Vue 都是漸進式框架,支持 script 標簽直接使用,也支持在工程中通過模塊化方式引入使用。

Jsx VS Template

  • React:采用的 Jsx 在寫法上更為靈活多變 ,屬于在 Js 中增加了 HTML 語法,組件的實現思路是 All in Js ,開發過程中擁有 Js 完整的生態。同時開發工具對 JSX 的支持相比于現有可用的其他 Vue 模板也比較先進 (比如,linting、類型檢查、編輯器的自動完成)。
  • Vue:整體思路是 Template 模板語法,跟 Jsx 相比,它是在 HTML 中增加了對部分 Js 語法的支持,在靈活度上不如 Jsx,本質是模板語法無法窮舉所有 Js 能力,所以筆者認為 Vue 內部使用的 slot、directive 等,也恰恰是對模板語法不夠靈活所做出的一種補充,使模板語法也能完成跟 Jsx 同樣的事情。模板語法也有優點,它更接近原生 HTML,對于新手上手更友好 ,并且在 Vue3 中,它從模版層面進行靜態分析,對靜態模版做標記,從而提升 diff 的效率 。值得一提的是,與 React 一樣,Vue 在技術上也支持 render 函數和 Jsx,但只是不是默認的而已。

那么你可能會有疑問,為什么 Template 不去適配所有的 Js 語法?這里舉一個例子:Taro

Taro1.x 和 Taro2.x 采用了窮舉所有 Jsx 語法的方式,去生成不同平臺的代碼,導致每次 Jsx 或 Js 語法有更新,這兩個版本的 Taro 編譯器都要同步去做適配,這是一種重編譯時的方案,對 Jsx 的支持其實非常痛苦,所以 Taro3 索性采取了重運行時、輕編譯時的重構,以獲得編譯器對 Jsx 更有好的支持。并且還有另一個原因是,我們假如 Template 支持了所有 Js 能力,那么勢必又導致了 Template 語法變得復雜,也可能和原本統一的 Ecma 規范割裂(層出不窮的小程序就是一個典型的例子,相當于規范之中又出規范,生態之外再造生態 ),造成了學習成本增加和沉重的編譯器。

  • 共性 也是有的,都是 DSL,對底層而言,雖然兩者采用了不一樣的方式實現,但最終都會被編譯為渲染函數 去執行。
  • 下圖是 Jsx 語法示例:
932984d2-609c-11ed-8abf-dac502259ad0.png
  • 下圖是 Template 語法示例:
93464d42-609c-11ed-8abf-dac502259ad0.png

SFC

  • HTML:React 是 Jsx,Vue 是默認的 Template,在這里不在贅述區別,同時需要指出的是,Vue3 相較 Vue2 而言,Template 下可以允許存在多個根節點 ,可以減少一些不必要的 DOM 層級。
  • JS:React 組件本身就是 JS 文件,形式采用函數組件和類組件,編程范式上更貼近面向對象 + 官方推崇的函數式。Vue2 組件是 Options Api,通過一個個配置項去實現生命周期、狀態聲明和邏輯開發。Vue3 對于部分邏輯處理和 Vue2 有很大區別,setup 模式下,已經和 React 越來越趨同 了,編程范式是面向過程 + 函數式,官方命名為 Composition Api,可以使同一個功能邏輯更加集中。
  • CSS:React 的 CSS 使用方式是直接通過 Import 導入,Vue 文件中有專門處理樣式的 Style 標簽,值得一提的是,Vue3 內置狀態驅動的動態 CSS,詳細可查看官方文檔 https://cn.vuejs.org/api/sfc-css-features.html。
  • 其他思考:React 的函數式組件和 Vue3Composition Api,在 ESM 模塊規范下對 Tree-shaking 更友好 ,更容易減少構建體積。

組件使用

  • React 組件僅需引入即可使用。
  • Vue 的組件引入后需要全局或局部注冊,且組件內的 Props 的要顯式聲明。

邏輯復用

  • React 的復用主要體現在高階組件、render props 以及 hooks,但是也有他們對應的不足。高階組件層級過深時容易帶來 props 的命名沖突、來源不明確的問題,并且額外的組件實例會有更多的內存消耗。hooks 的引入,使 React 的邏輯抽離更容易,完全修復了命名沖突,來源準確,且無額外開銷,可以貫徹函數式編程的理念。但是與此同時,因為 hooks 中可能保留著組件狀態,也意味著每次 React 的更新,如果不進行手動優化,不論前后數據是否有變化,每個 hook 都會重新執行,這也是底層架構上額外帶來的問題。
  • Vue 的組件復用主要是是用 Mixin、Extend、插槽和 Vue3 的 Function API。Mixin:它和 React 的高階組件帶來的問題十分類似,響應式數據命名沖突,以及邏輯來源不明確。插槽:主要功能點是組件復用,它解決了數據命名沖突的問題,同時數據來源準確,但是也存在著額外組件實例帶來的內存消耗 Function API:目前看來是較為優秀的一種邏輯復用方式,沒有以上列出的所有問題,雖然和 React 的 hooks 十分相像,但是本質不同 ,Vue 可以追蹤到數據變化,也僅在組件實例化時執行一次。

樣式隔離方案

  • React:CSS moduleCSS in JSBEM 命名規范
  • Vue:官方支持 Style scopedBEM 命名規范

TS 支持

  • React 本身就是 Js 和 Jsx,并且 TS 專門開了后門給做了支持(Jsx 其實一開始沒有類型支持,Tsx 的開發體驗完全來自于 TS 專門針對 Jsx 制定的一整套推導機制),所以 Tsx 的類型支持也很完善
  • Vue2.x 來自尤雨溪本人的回答是 “因為當初 API 的設計根本就沒有考慮類型系統”,2.x 跟 TS 的整合需要借助 vue-class-component 使用類組件進行開發,所以目前 2.x 版本的 Vue 對 TS 的支持度較 React 仍有差距,但是最近隨著 Vue2.7 的發布,可以使 Vue2.x 用上大部分 Vue3 的寫法,也使 Vue2.x 就具備了兼容 TS 的能力。
  • Vue3,根據來自官方的建議,IDE 支持需用


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62979
  • 編輯器
    +關注

    關注

    1

    文章

    806

    瀏覽量

    31293
  • vue
    vue
    +關注

    關注

    0

    文章

    58

    瀏覽量

    7898

原文標題:關于 “ React 和 Vue 該用哪個” 我真的栓 Q

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    熱門前端框架:引領現代 Web 開發的潮流

    在當今快速發展的前端開發領域,熱門前端框架如 ReactVue 和 Angular 等,成為了開發者構建高效、高性能 Web 應用的得力工具。它們各自具有獨特的特點和優勢,引領著現代 Web 開發
    的頭像 發表于 01-22 10:08 ?92次閱讀

    Vue3設計思想及響應式源碼剖析

    作者:京東物流 喬盼盼 一、Vue3結構分析 1、Vue2與Vue3的對比 ?對TypeScript支持不友好(所有屬性都放在了this對象上,難以推倒組件的數據類型) ?大量的API掛載在V
    的頭像 發表于 12-20 10:24 ?179次閱讀

    使用SSR構建React應用的步驟

    使用SSR(Server-Side Rendering,服務器端渲染)構建React應用的步驟通常包括以下幾個階段: 一、項目初始化與配置 創建React項目 : 可以使用Create React
    的頭像 發表于 11-18 11:30 ?394次閱讀

    簡述大前端技術棧的渲染原理

    應用開發:Android、iOS、鴻蒙(HarmonyOS)等; ?Web前端框架:VueReact、Angular等; ?小程序開發:微信小程序、京東小程序、支付寶小程序等; ?跨平臺解決方案:React Native、Fl
    的頭像 發表于 11-07 10:11 ?296次閱讀

    Taro鴻蒙技術內幕系列(一):如何將React代碼跑在ArkUI上

    基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統公測,本系列文章將深入解析 Taro 如何實現使用 React 開發高性能鴻蒙應用的技術內幕。
    的頭像 發表于 10-25 17:24 ?381次閱讀
    Taro鴻蒙技術內幕系列(一):如何將<b class='flag-5'>React</b>代碼跑在ArkUI上

    如果lme49990用在lpf位置供電bypass電容該用多少?

    請問如果lme49990用在lpf位置供電bypass電容該用多少?我查過pdf建議是:. From experiment results, a 10μF tantalum, 2.2μF
    發表于 10-14 06:45

    請問做通用有源低通濾波器應該用什么芯片比較好呢?

    做通用有源低通濾波器應該用什么芯片比較好呢?我用的OPA820做的效果不太理想啊
    發表于 09-12 07:06

    LM393應該用模擬地還是數字地?

    第一級為光電二極管的互阻抗放大,第二級無限多增益低通濾波,前兩級芯片為OPA656,第三級用LM393做的比較器,輸出光信號為經過IrDA編碼的波特率為115.2kbps的信號,請問需要模擬地數字地隔離嗎?如果要隔離,需要注意什么嗎?393應該用模擬地還是數字地?
    發表于 09-06 06:27

    求助關于論壇的選擇

    大家好,我想問問如果我想學習關于集成電路IC的相關知識,可以在這里的哪個論壇學習?目前只接觸學習了IC基礎知識,所以這里面的論壇專業術語看不太懂,就不知道該去哪個學習。感謝大家的建議!??? 您可以直接說論壇的名字,如果能說下選
    發表于 07-13 23:02

    bootstrap框架和vue框架的區別

    Bootstrap和Vue都是目前非常流行的前端開發框架,它們各自具有獨特的優勢和特點。 設計理念 Bootstrap是一個基于HTML、CSS和JavaScript的前端開發框架,主要用于快速構建
    的頭像 發表于 07-11 09:55 ?986次閱讀

    tensorflow和pytorch哪個

    tensorflow和pytorch都是非常不錯的強大的框架,TensorFlow還是PyTorch哪個更好取決于您的具體需求,以下是關于這兩個框架的一些關鍵點: TensorFlow : 發布時間
    的頭像 發表于 07-05 09:42 ?776次閱讀

    工業物聯網與SCADA哪個更強大

    提高生產效率、降低運營成本,并通過實時監控和控制來優化工業流程。然而,關于哪個系統更強大,我們需要從多個維度進行深入分析。
    的頭像 發表于 06-07 15:17 ?1196次閱讀

    SPC58EC應該用什么軟件和下載器燒寫hex格式的軟件呀?

    我用的芯片是SPC58EC,請問應該用什么軟件和下載器燒寫hex格式的軟件呀?或者中國ST技術支持怎么聯系呀?
    發表于 03-28 06:45

    怎么用Labview2012之后的版本控制simlink模型

    查到的SIT工具包只能用于Labvie2012之前的版本,如果只能用2020左右的版本,該用哪個工具包代替SIT呢,求助
    發表于 03-07 20:11

    NVIDIA顯卡驅動下載哪個?NVIDIA顯卡驅動下載方法

    關于下載哪個NVIDIA顯卡驅動,建議您下載最新版本的官方驅動程序,以確保顯卡性能的穩定性和最佳體驗。同時,也可以根據您的電腦型號和配置,選擇適合您的驅動程序版本。如果您不確定應該下載哪個版本的驅動程序,可以在NVIDIA官網上
    的頭像 發表于 03-01 17:11 ?2918次閱讀
    大发888的示例| 百家乐投注软件有用吗| 德阳市| 蓝盾百家乐娱乐场开户注册 | KTV百家乐官网的玩法技巧和规则 王子百家乐官网的玩法技巧和规则 | 百家乐官网太阳城球讯网| 大发888网址是什么| 适合属虎做生意的名字| 澳门百家乐官网群策略| 顶级赌场 官方直营网| 百家乐官网正负计算| 百家乐官网代理网址| 娱网棋牌官网| 百家乐赌博机假在哪里| 百家乐官网怎么玩才会赢钱| 天上人间娱乐城| 百家乐国际赌场娱乐网规则| 24山方位 子孙 文昌| 宝龙百家乐官网娱乐城| 亚洲顶级赌场 网投领导者| 百家乐实战路| 澳门百家乐官网路单| 在线百家乐官网怎么下注| 皇冠网全讯通| 威尼斯人娱乐场开户| 百家乐官网街机游戏下载| 豪门娱乐| 大发888我爱好| 百家乐百战百胜| 百家乐娱乐城足球盘网| 网上的百家乐官网怎么才能赢 | 百家乐77scs| 百家乐做庄家必赢诀窍| 圣保罗百家乐官网的玩法技巧和规则 | 巴厘岛百家乐官网的玩法技巧和规则 | 百家乐在线小游戏| 百家乐官网网络游戏信誉怎么样 | 地理风水24山72局杨公水法| 在线百家乐官网纸牌| 百家乐官网赢钱| 百家乐官网路纸发表区|