亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

面試官常問Vue和React區(qū)別解析

 更新時(shí)間:2025年02月21日 08:47:33   作者:前端歐陽(yáng)  
Vue和React都是流行的前端框架,它們有很多相似之處,如組件化和使用虛擬DOM,但是,它們?cè)谠O(shè)計(jì)理念、組件存在形式、diff優(yōu)化和中文文檔方面存在一些不同,這篇文章給大家介紹面試官常問Vue和React區(qū)別,感興趣的朋友一起看看吧

前言

歐陽(yáng)最近找工作面試時(shí)總是被問到兩個(gè)問題:Vue和React的區(qū)別從編譯原理的角度來聊聊Vue的template和React的jsx。面試官問這些問題一般是想了解你對(duì)這兩個(gè)框架的理解,所以這是一個(gè)開放性的問題,不同的同學(xué)對(duì)框架的理解程度不同、側(cè)重點(diǎn)不同,回答出來的答案也不同。這篇文章歐陽(yáng)將從Vue出發(fā)來聊聊Vue和React的區(qū)別,大家有補(bǔ)充的歡迎在評(píng)論區(qū)提出。

歐陽(yáng)也在找工作,坐標(biāo)成都求內(nèi)推!

簡(jiǎn)單概述

先來說說相同點(diǎn),這個(gè)簡(jiǎn)單,組件化、采用虛擬DOM、以及都在向函數(shù)式編程靠攏,具體的表現(xiàn)就是Vue推出了Composition(組合式) API,React推出了hooks。

相同點(diǎn)都是一些老生常談的話題了,我們這篇文章主要來聊聊不同點(diǎn)。關(guān)于不同歐陽(yáng)列出了下面幾點(diǎn):

  • 設(shè)計(jì)理念不同

  • Vue的組件編譯后是一個(gè)組件對(duì)象,而React的組件就是一個(gè)函數(shù)

  • diff優(yōu)化

  • 中文文檔

設(shè)計(jì)理念

我們先來看一張React官網(wǎng)的截圖:

從這張圖中我們可以提取出兩個(gè)主要信息:React組件就是函數(shù)編寫組件的語(yǔ)法是JSX,本質(zhì)就是Javascript

我們平時(shí)寫React實(shí)際就是在寫JS,這也就是為什么React那么靈活的原因。靈活帶來的優(yōu)勢(shì)就是上限高,劣勢(shì)就是上手難度相對(duì)Vue較難。

所以在React社區(qū)中有高階組件、compose函數(shù)、純函數(shù)等概念,但是這些概念在Vue社區(qū)中很少提及。

而Vue從出生開始就一直在盡可能的降低前端開發(fā)門檻,通過什么方式降低呢?

Vue內(nèi)置了很多黑魔法,比如SFC、宏函數(shù)、指令scoped等,其中最大的黑魔法就是單文件組件SFC。只要我們按照Vue的設(shè)計(jì)規(guī)范來,就能輕松的寫出漂亮的代碼。

同時(shí)Vue的設(shè)計(jì)也不會(huì)讓人反感,因?yàn)閷W(xué)習(xí)他的這一套東西真的很容易,這也就是為什么很多后端同學(xué)寫前端都是從Vue開始。

也正是因?yàn)橛羞@么多黑魔法,所以導(dǎo)致很多同學(xué)一年工作經(jīng)驗(yàn)用三年。他們將這些黑魔法當(dāng)作前端語(yǔ)言中的一部分,離開這些黑魔法后發(fā)現(xiàn)自己什么都不懂。

組件存在的形式

從前面的官網(wǎng)截圖可以看到React中定義一個(gè)組件就是在定義一個(gè)函數(shù),一個(gè)文件里面可以定義多個(gè)函數(shù),所以理所應(yīng)當(dāng)?shù)脑谝粋€(gè)文件中可以定義多個(gè)組件。

但是在Vue中事情就不一樣了。

大家都知道在Vue中一個(gè).vue文件就是一個(gè)Vue組件,所以想正常的在一個(gè).vue文件中定義多個(gè)Vue組件是不可能的。

大家知道一個(gè)Vue組件到底是什么樣的嗎?比如這個(gè)子組件count-child.vue

<template>
  <h1>count的值是: {{ count }}</h1>
  <button @click="count++">count++</button>
</template>
<script setup lang="ts">
import { ref } from "vue";
const count = ref(0);
</script>

很簡(jiǎn)單!我們直接在父組件里面把他打印出來就知道這個(gè)組件到底是什么玩意了,父組件代碼如下:

<script setup lang="ts">
import CountChild from "./count-child.vue";
console.log(CountChild);
</script>

我們來控制臺(tái)上面看看打印出來的CountChild長(zhǎng)什么樣,如下圖:

從上圖中可以看到import導(dǎo)入進(jìn)來的CountChild變量是一個(gè)對(duì)象,并且對(duì)象上面還有一些屬性的方法:render、setup。

在父組件里面import CountChild from "./count-child.vue",這是使用了import語(yǔ)法,講道理子組件里面應(yīng)該是有export的,但是在子組件里面沒有看到任何export的代碼。

其實(shí)這些都是vue-loader或者@vitejs/plugin-vue做的工作,底層還是調(diào)用Vue暴露出來的編譯API。

經(jīng)過他們的處理一個(gè).vue文件就變成了一個(gè)組件對(duì)象。

所以在Vue中組件其實(shí)就是對(duì)象,只是這個(gè)對(duì)象中擁有render、setup等方法。其實(shí)我們可以自己手寫一個(gè)對(duì)象,按照Vue他的規(guī)則去定義對(duì)象里面的render、setup等方法同樣可以定義一個(gè)Vue組件。

正是因?yàn)樵赩ue中組件就是對(duì)象,所以在Vue社區(qū)中才很少出現(xiàn)高階組件、compose函數(shù)、純函數(shù)等概念。因?yàn)檫@些東西都是依賴于函數(shù)去實(shí)現(xiàn)的,而React中組件就是函數(shù)。

diff優(yōu)化

眾所周知每重新渲染一次都會(huì)執(zhí)行一次diff算法,如果參與diff的DOM足夠復(fù)雜,那么這個(gè)diff的過程也是很耗時(shí)的。

在優(yōu)化diff上面Vue和React走向了兩個(gè)極端,Vue走向了更加細(xì)粒度的更新,也就是大名鼎鼎的靶向更新,如果你不知道可以看一下我的這篇 靶向更新 文章。而React則是引入了fiber,采用時(shí)間切片的方式進(jìn)行優(yōu)化。

那么為什么React中沒有實(shí)現(xiàn)靶向更新呢?

原因很簡(jiǎn)單,因?yàn)閂ue的template模版很不靈活,也正是因?yàn)椴混`活所以可以在編譯時(shí)就對(duì)代碼進(jìn)行分析出哪些節(jié)點(diǎn)是動(dòng)態(tài)的。相反在React中的JSX是相當(dāng)靈活,想對(duì)他進(jìn)行靜態(tài)分析很難實(shí)現(xiàn)。

中文文檔

尤大和大部分Vue團(tuán)隊(duì)成員都是國(guó)人,所以每當(dāng)英文文檔更新后,對(duì)應(yīng)的中文文檔就會(huì)很快的更新。這對(duì)于英文不好的同學(xué)是特別友好的,React雖然也有中文文檔,但是相比英文文檔來說還是有一些滯后。

總結(jié)

這篇文章我們分別從設(shè)計(jì)理念、組件存在形式、diff優(yōu)化、中文文檔方面聊了一下Vue和React的區(qū)別,歡迎大家在評(píng)論區(qū)進(jìn)行補(bǔ)充。

到此這篇關(guān)于面試官常問Vue和React區(qū)別解析的文章就介紹到這了,更多相關(guān)Vue和React區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue開發(fā)中常見的套路和技巧總結(jié)

    Vue開發(fā)中常見的套路和技巧總結(jié)

    這篇文章主要給大家介紹了關(guān)于Vue開發(fā)中常見的套路和技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Vue3實(shí)現(xiàn)動(dòng)態(tài)高度的虛擬滾動(dòng)列表的示例代碼

    Vue3實(shí)現(xiàn)動(dòng)態(tài)高度的虛擬滾動(dòng)列表的示例代碼

    虛擬滾動(dòng)列表是一種優(yōu)化長(zhǎng)列表渲染性能的技術(shù),通過只渲染可視區(qū)域內(nèi)的列表項(xiàng),減少DOM的渲染數(shù)量,本文就來介紹一下Vue3實(shí)現(xiàn)動(dòng)態(tài)高度的虛擬滾動(dòng)列表的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01
  • Vue2幾種常見開局方式詳解

    Vue2幾種常見開局方式詳解

    這篇文章主要為大家詳細(xì)介紹了Vue2幾種常見開局方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • vue前端實(shí)現(xiàn)表格數(shù)據(jù)增查改刪功能

    vue前端實(shí)現(xiàn)表格數(shù)據(jù)增查改刪功能

    增刪改查是我們寫項(xiàng)目百分之七十會(huì)遇到的代碼,下面這篇文章主要給大家介紹了關(guān)于vue前端實(shí)現(xiàn)表格數(shù)據(jù)增查改刪功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • vue中$event使用之獲取當(dāng)前元素及相關(guān)元素

    vue中$event使用之獲取當(dāng)前元素及相關(guān)元素

    這篇文章主要介紹了vue中$event使用之獲取當(dāng)前元素及相關(guān)元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue項(xiàng)目中如何配置src文件下的@別名

    Vue項(xiàng)目中如何配置src文件下的@別名

    這篇文章主要介紹了Vue項(xiàng)目中如何配置src文件下的@別名問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 關(guān)于移動(dòng)端與大屏幕自適應(yīng)適配方案

    關(guān)于移動(dòng)端與大屏幕自適應(yīng)適配方案

    這篇文章主要介紹了關(guān)于移動(dòng)端與大屏幕自適應(yīng)適配方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue作用域插槽實(shí)現(xiàn)方法及作用詳解

    Vue作用域插槽實(shí)現(xiàn)方法及作用詳解

    這篇文章主要介紹了Vue作用域插槽實(shí)現(xiàn)方法及作用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Vue.js中動(dòng)態(tài)更改svg的相關(guān)屬性詳解

    Vue.js中動(dòng)態(tài)更改svg的相關(guān)屬性詳解

    這篇文章主要為大家介紹了Vue.js中動(dòng)態(tài)更改svg的相關(guān)屬性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Vue中vue-router路由使用示例詳解

    Vue中vue-router路由使用示例詳解

    Vue Router是Vue提供的路由管理器,將組件與路由一一對(duì)應(yīng)起來,這種對(duì)應(yīng)關(guān)系就路由,這篇文章主要介紹了Vue中vue-router路由使用,需要的朋友可以參考下
    2024-06-06

最新評(píng)論