在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內(nèi)不再提示

關(guān)于“React和Vue該用哪個”

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

一、前言:我全都要

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

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

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

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

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

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

二、正文:到底要啥

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

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

1. 選型對象說明

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

關(guān)于對比對象的選擇:

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

2. 團隊的適用性

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

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

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

3. 兼容性要求

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

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

4. 使用層面對比

框架引入

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

Jsx VS Template

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

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

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

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

SFC

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

組件使用

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

邏輯復用

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

樣式隔離方案

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

TS 支持

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


審核編輯 :李倩


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

    關(guān)注

    3

    文章

    4363

    瀏覽量

    63797
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    812

    瀏覽量

    31615
  • vue
    vue
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    8081

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    S32K310在配置中斷時,Handler應(yīng)該填寫什么?

    我想知道在配置中斷時,Handler應(yīng)該填寫什么。 例如我要使用PIT中斷,我該用什么定義去替換undefined Handler,在哪個文件中有定義?
    發(fā)表于 04-08 08:18

    DLP4710LC只用UV光源,demo可以進行100%驅(qū)動么,該如何接?

    只用UV光源,demo可以進行100%驅(qū)動么,該如何接,demo上是rgb三顆光源。 另外,只用uv光源的話,固件應(yīng)該用哪個,有鏈接么
    發(fā)表于 02-21 17:00

    熱門前端框架:引領(lǐng)現(xiàn)代 Web 開發(fā)的潮流

    在當今快速發(fā)展的前端開發(fā)領(lǐng)域,熱門前端框架如 ReactVue 和 Angular 等,成為了開發(fā)者構(gòu)建高效、高性能 Web 應(yīng)用的得力工具。它們各自具有獨特的特點和優(yōu)勢,引領(lǐng)著現(xiàn)代 Web 開發(fā)
    的頭像 發(fā)表于 01-22 10:08 ?316次閱讀

    Vue3設(shè)計思想及響應(yīng)式源碼剖析

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

    使用SSR構(gòu)建React應(yīng)用的步驟

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

    簡述大前端技術(shù)棧的渲染原理

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

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

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

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

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

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

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

    LM393應(yīng)該用模擬地還是數(shù)字地?

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

    求助關(guān)于論壇的選擇

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

    bootstrap框架和vue框架的區(qū)別

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

    tensorflow和pytorch哪個

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

    工業(yè)物聯(lián)網(wǎng)與SCADA哪個更強大

    提高生產(chǎn)效率、降低運營成本,并通過實時監(jiān)控和控制來優(yōu)化工業(yè)流程。然而,關(guān)于哪個系統(tǒng)更強大,我們需要從多個維度進行深入分析。
    的頭像 發(fā)表于 06-07 15:17 ?1437次閱讀

    貼片電感和繞線電感哪個

    電子發(fā)燒友網(wǎng)站提供《貼片電感和繞線電感哪個好.docx》資料免費下載
    發(fā)表于 05-06 10:25 ?0次下載
    主站蜘蛛池模板: 国产三级在线看 | 91免费视频网站 | 狠狠躁夜夜躁人人爽天天天天 | 成人亚洲欧美在线电影www色 | 国产一区二区在线视频播放 | 国产哺乳期奶水avav | 高清国产在线观看 | 大桥未久加勒比女热大陆在线 | 97玖玖| 日本aaaaa毛片在线视频 | 狠狠色噜噜狠狠狠狠97影音先锋 | 免费永久视频 | 女生扒开尿口让男生舔 | 欧美一级视频免费观看 | 伊人成人在线 | 爆操欧美| 女人张开双腿让男人桶完整 | 大量国产后进翘臀视频 | 日本免费网站观看 | 99久久婷婷免费国产综合精品 | 2021色噜噜狠狠综曰曰曰 | 国产情侣出租屋露脸实拍 | 亚洲入口无毒网址你懂的 | 特级毛片aaaa级毛片免费 | 国产毛片农村妇女aa板 | 色综合天天综合网国产人 | 午夜小视频男女在线观看 | 久久黄色毛片 | 欧美怡红院免费全部视频 | 丁香综合激情 | 国产精品波多野结衣 | 亚洲女同一区二区 | 亚欧精品一区二区三区 | 狠狠操狠狠干 | 乱码一区二区三区完整视频 | 午夜美女视频在线观看高清 | 成年免费大片黄在线观看免费 | 人人爽人人看 | 国产精品夜夜春夜夜爽久久 | 欧美一级视频高清片 | 欧美成人自拍视频 |