最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺出分析vue2和vue3的區(qū)別

 更新時(shí)間:2023年06月14日 09:21:29   作者:KinHKin(五年前端)  
這篇文章主要介紹了vue2和vue3的區(qū)別,較為詳細(xì)的分析了vue2與vue3的常見區(qū)別與使用方法,需要的朋友可以參考下

前言

vue2和vu3之前的區(qū)別,一直以來是面試必考題目,如何回答,回答的層次決定了面試者的對(duì)于vue2,3的理解,以及對(duì)于vue3目前穩(wěn)定版本發(fā)展的方向的了解,即考察使用程度,又考察了學(xué)習(xí)能力,可以說是回答即可以很簡(jiǎn)單,也可以很不簡(jiǎn)單,這里需要注意的是面試官的面試程度,需要我們層層遞進(jìn),由淺入深來回答,這樣可以體現(xiàn)出面試者的考慮全面,又能體現(xiàn)知識(shí)廣度。簡(jiǎn)而言之,vue2升級(jí)vue3之后變得更快,更輕,協(xié)作更方便。無論對(duì)于我們開發(fā)者的體驗(yàn)或者用戶使用方面都是升級(jí)優(yōu)化,但是本質(zhì)區(qū)別是什么,下面分為幾個(gè)部分進(jìn)行講解。

 vue2 vs vue3

對(duì)比vue2vue3
腳手架命令式可視化創(chuàng)建腳?架
組件通信見下文見下文
數(shù)據(jù)監(jiān)聽watch,computedwatch,watchEffect,computed
雙向綁定Object.definePropertyProxyAPI
?命周期見下文見下文
api選項(xiàng)式組合式

雙向綁定更新

vue2 的雙向數(shù)據(jù)綁定是利?ES5 的?個(gè) API ,Object.defineProperty()對(duì)數(shù)據(jù)進(jìn)?劫持 結(jié)合 發(fā)布訂閱模式的?式來實(shí)現(xiàn)的。

vue3 中使?了 ES6 的 ProxyAPI 對(duì)數(shù)據(jù)代理,通過 reactive() 函數(shù)給每?個(gè)對(duì)象都包?層 Proxy,通過 Proxy 監(jiān)聽屬性的變化,從? 實(shí)現(xiàn)對(duì)數(shù)據(jù)的監(jiān)控。

這?是相?于vue2版本,使?proxy的優(yōu)勢(shì)如下

1.defineProperty只能監(jiān)聽某個(gè)屬性,不能對(duì)全對(duì)象監(jiān)聽 可以省去for in、閉包等內(nèi)容來提升效率(直接綁定整個(gè)對(duì)象即可)

2.可以監(jiān)聽數(shù)組,不?再去單獨(dú)的對(duì)數(shù)組做特異性操作,通過Proxy可以直接攔截所有對(duì)象類型數(shù)據(jù)的操作,完美?持對(duì)數(shù)組的監(jiān)聽。

實(shí)例化

Vue2.x中new出的實(shí)例對(duì)象,所有的東西都在這個(gè)vue對(duì)象上,這樣其實(shí)?論你?到還是沒?到,都會(huì)跑?遍,這樣不僅提?了性能消耗,也?疑增加了?戶加載時(shí)間。

?vue3.0中可以?ES module imports按需引?,如:keep-alive內(nèi)置組件、v-model指令,等等,不僅我們開發(fā)起來更加的便捷,減少 了內(nèi)存消耗,也同時(shí)減少了?戶加載時(shí)間,優(yōu)化?戶體驗(yàn)。

生命周期

引用掘金圖片如下:

e8256adeaa1d4ab79df2cea118b8b38e.png

獲取props

vue2在script代碼塊可以直接獲取props,vue3通過setup指令傳遞

vue2:console.log('props',this.xxx)
vue3:setup(props,context){ console.log('props',props) }

數(shù)據(jù)和方法的定義

Vue2使?的是選項(xiàng)類型API(Options API),Vue3使?的是合成型API(Composition API)

Vue2:

data() { return {}; }, methods:{ }

Vue3:

數(shù)據(jù)和?法都定義在setup中,并統(tǒng)?進(jìn)?return{}

給父組件傳值emit

vue2:this.$emit()
vue3:setup(props,context){context.emit()}

 watchEffect

Vue3中除了watch,還引入了副作用監(jiān)聽函數(shù)watchEffect,用過之后我發(fā)現(xiàn)它和React中的useEffect很像,只不過watchEffect不需要傳入依賴項(xiàng)。

那么什么是watchEffect呢?

watchEffect它會(huì)立即執(zhí)行傳入的一個(gè)函數(shù),同時(shí)響應(yīng)式追蹤其依賴,并在其依賴變更時(shí)重新運(yùn)行該函數(shù)。

computed和watch所依賴的數(shù)據(jù)必須是響應(yīng)式的。Vue3引入了watchEffect,watchEffect 相當(dāng)于將 watch 的依賴源和回調(diào)函數(shù)合并,當(dāng)任何你有用到的響應(yīng)式依賴更新時(shí),該回調(diào)函數(shù)便會(huì)重新執(zhí)行。不同于 watch的是watchEffect的回調(diào)函數(shù)會(huì)被立即執(zhí)行,即({ immediate: true })。

組件通信

0244e04dc98042a88b8947ed634dd910.png

注意

props中數(shù)據(jù)流是單項(xiàng)的,即子組件不可改變父組件傳來的值

在組合式API中,如果想在子組件中用其它變量接收props的值時(shí)需要使用toRef將props中的屬性轉(zhuǎn)為響應(yīng)式。

attrs和listeners

子組件使用$attrs可以獲得父組件除了props傳遞的屬性和特性綁定屬性 (class和 style)之外的所有屬性。

子組件使用$listeners可以獲得父組件(不含.native修飾器的)所有v-on事件監(jiān)聽器,在Vue3中已經(jīng)不再使用;但是Vue3中的attrs不僅可以獲得父組件傳來的屬性也可以獲得父組件v-on事件監(jiān)聽器

路由

vue3和vue2路由常用功能只是寫法上有些區(qū)別:

vue3的beforeRouteEnter作為路由守衛(wèi)的示例是因?yàn)樗?code>setup語(yǔ)法糖中是無法使用的;大家都知道setup中組件實(shí)例已經(jīng)創(chuàng)建,是能夠獲取到組件實(shí)例的。而beforeRouteEnter是再進(jìn)入路由前觸發(fā)的,此時(shí)組件還未創(chuàng)建,所以是無法用在setup中的;如果想在setup語(yǔ)法糖中使用則需要再寫一個(gè)script 如下:

<script>
export default {
  beforeRouteEnter(to, from, next) {
    // 在渲染該組件的對(duì)應(yīng)路由被 confirm 前調(diào)用
    next()
  },
};
</script>

vue3路由寫法:

<script>
import { defineComponent } from 'vue'
import { useRoute, useRouter } from 'vue-router'
export default defineComponent({
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對(duì)應(yīng)路由被 confirm 前調(diào)用
    next()
  },
  beforeRouteLeave ((to, from, next)=>{//離開當(dāng)前的組件,觸發(fā)
    next()       
  }),
  beforeRouteLeave((to, from, next)=>{//離開當(dāng)前的組件,觸發(fā)
    next()      
  }),
  setup() {
    const router = useRouter()
    const route = useRoute()
    const toPage = () => {
      router.push(xxx)
    }
    //獲取params 注意是route
    route.params
    //獲取query
    route.query
    return {
      toPage
    }
  },
});
</script>

vue2寫法:

<script>
export default {
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對(duì)應(yīng)路由被 confirm 前調(diào)用
    next()
  },
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對(duì)應(yīng)路由被 confirm 前調(diào)用
    next()
  },
  beforeRouteLeave ((to, from, next)=>{//離開當(dāng)前的組件,觸發(fā)
    next()       
  }),
  beforeRouteLeave((to, from, next)=>{//離開當(dāng)前的組件,觸發(fā)
    next()      
  }),
  methods:{
    toPage(){
      //路由跳轉(zhuǎn)
      this.$router.push(xxx)
    }
  },
  created(){
    //獲取params
    this.$route.params
    //獲取query
    this.$route.query
  }
}
</script>

 總結(jié)

vue2和vue3比較還是有很多不一樣的地方,比如setup語(yǔ)法糖的形式最為便捷而且更符合開發(fā)者習(xí)慣,未來vue3將會(huì)大面積使用這種規(guī)則,這樣更加符合開發(fā)習(xí)慣和降低后續(xù)維護(hù)的成本,還有目前Vue3已經(jīng)成為了Vue的默認(rèn)版本,后續(xù)維護(hù)應(yīng)該也會(huì)以Vue3為主。希望各位同學(xué)趕緊學(xué)起來吧~

相關(guān)文章

  • 啟動(dòng)myvue報(bào)錯(cuò)npm?ERR!?code?ENOENT?npm?ERR!?syscall?open的解決辦法

    啟動(dòng)myvue報(bào)錯(cuò)npm?ERR!?code?ENOENT?npm?ERR!?syscall?open的解

    這篇文章主要介紹了啟動(dòng)myvue報(bào)錯(cuò)npm?ERR!?code?ENOENT?npm?ERR!?syscall?open的解決辦法,文中給出了詳細(xì)的解決方法,并通過圖文結(jié)合的方式介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Vue使用axios發(fā)送請(qǐng)求并實(shí)現(xiàn)簡(jiǎn)單封裝的示例詳解

    Vue使用axios發(fā)送請(qǐng)求并實(shí)現(xiàn)簡(jiǎn)單封裝的示例詳解

    這篇文章主要介紹了Vue使用axios發(fā)送請(qǐng)求并實(shí)現(xiàn)簡(jiǎn)單封裝,主要包括安裝axios及簡(jiǎn)單使用配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Vue實(shí)現(xiàn)兩個(gè)列表之間的數(shù)據(jù)聯(lián)動(dòng)的代碼示例

    Vue實(shí)現(xiàn)兩個(gè)列表之間的數(shù)據(jù)聯(lián)動(dòng)的代碼示例

    在Vue.js應(yīng)用開發(fā)中,列表數(shù)據(jù)的聯(lián)動(dòng)是一個(gè)常見的需求,這種聯(lián)動(dòng)可以用于多種場(chǎng)景,例如過濾篩選、關(guān)聯(lián)選擇等,本文將詳細(xì)介紹如何在Vue項(xiàng)目中實(shí)現(xiàn)兩個(gè)列表之間的數(shù)據(jù)聯(lián)動(dòng),并通過多個(gè)具體的代碼示例來幫助讀者理解其實(shí)現(xiàn)過程,需要的朋友可以參考下
    2024-10-10
  • 使用?Vue3?實(shí)現(xiàn)文章目錄功能

    使用?Vue3?實(shí)現(xiàn)文章目錄功能

    本文給大家分享如何使用vue3實(shí)現(xiàn)文章目錄功能,特色功能主要是自動(dòng)高亮選中當(dāng)前正在閱讀的章節(jié),自動(dòng)展開當(dāng)前正在閱讀的章節(jié)的子標(biāo)題,并隱藏其他章節(jié)的子標(biāo)題,代碼簡(jiǎn)單易懂,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • Vue項(xiàng)目路由刷新的實(shí)現(xiàn)代碼

    Vue項(xiàng)目路由刷新的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Vue項(xiàng)目路由刷新的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • Vuex中actions優(yōu)雅處理接口請(qǐng)求的方法

    Vuex中actions優(yōu)雅處理接口請(qǐng)求的方法

    在項(xiàng)目開發(fā)中,如果使用到了 vuex,通常我會(huì)將所有的接口請(qǐng)求單獨(dú)用一個(gè)文件管理,這篇文章主要介紹了Vuex中actions如何優(yōu)雅處理接口請(qǐng)求,業(yè)務(wù)邏輯寫在 actions 中,本文給大家分享完整流程需要的朋友可以參考下
    2022-11-11
  • vuex實(shí)現(xiàn)歷史記錄的示例代碼

    vuex實(shí)現(xiàn)歷史記錄的示例代碼

    這篇文章主要介紹了vuex實(shí)現(xiàn)歷史記錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Vue 報(bào)錯(cuò)TypeError: this.$set is not a function 的解決方法

    Vue 報(bào)錯(cuò)TypeError: this.$set is not a function 的解決方法

    這篇文章主要介紹了Vue 報(bào)錯(cuò)TypeError: this.$set is not a function 的解決方法,分享給大家,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • el-table 表格最大高度max-height的問題解決

    el-table 表格最大高度max-height的問題解決

    在工作中遇到了多個(gè)滾動(dòng)條的情況,是因?yàn)閑l-table的max-height設(shè)置為固定值導(dǎo)致的,本文主要介紹了el-table 表格最大高度max-height的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Vue SPA單頁(yè)應(yīng)用首屏優(yōu)化實(shí)踐

    Vue SPA單頁(yè)應(yīng)用首屏優(yōu)化實(shí)踐

    這篇文章主要介紹了Vue SPA單頁(yè)應(yīng)用首屏優(yōu)化實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06

最新評(píng)論

华宁县| 聂荣县| 钦州市| 朝阳县| 潞城市| 资溪县| 静安区| 乳山市| 盐亭县| 炉霍县| 自贡市| 喀什市| 八宿县| 平原县| 靖西县| 桓仁| 兴化市| 农安县| 吴江市| 凌海市| 四平市| 家居| 平陆县| 社旗县| 当涂县| 吴江市| 南投市| 霍林郭勒市| 吴旗县| 枝江市| 满城县| 临汾市| 永宁县| 绥阳县| 孝感市| 红原县| 曲阜市| 莱芜市| 贞丰县| 奉节县| 上栗县|