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

由淺入深講解vue2和vue3的區(qū)別

 更新時間:2023年02月08日 10:03:11   作者:KinHKin(五年前端)  
最近發(fā)現(xiàn)很多要求Vue3的技術了,不得不說it技術的更新真的太快了,作為vue2老用戶,我們在學習Vue3前應該了解他們的區(qū)別以及背后的原因,下面這篇文章主要給大家介紹了關于vue2和vue3區(qū)別的相關資料,需要的朋友可以參考下

前言

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

vue2 vs vue3 對比

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

雙向綁定更新

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

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

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

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

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

實例化

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

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

生命周期

引用掘金圖片如下:

獲取props

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

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

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

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

Vue2:

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

Vue3:

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

給父組件傳值emit

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

watchEffect

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

那么什么是watchEffect呢?

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

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

組件通信

0244e04dc98042a88b8947ed634dd910.png

注意

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

在組合式API中,如果想在子組件中用其它變量接收props的值時需要使用toRef將props中的屬性轉為響應式。

attrs和listeners

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

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

路由

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

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

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

vue3路由寫法:

<script>
import { defineComponent } from 'vue'
import { useRoute, useRouter } from 'vue-router'
export default defineComponent({
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對應路由被 confirm 前調用
    next()
  },
  beforeRouteLeave ((to, from, next)=>{//離開當前的組件,觸發(fā)
    next()       
  }),
  beforeRouteLeave((to, from, next)=>{//離開當前的組件,觸發(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) {
    // 在渲染該組件的對應路由被 confirm 前調用
    next()
  },
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對應路由被 confirm 前調用
    next()
  },
  beforeRouteLeave ((to, from, next)=>{//離開當前的組件,觸發(fā)
    next()       
  }),
  beforeRouteLeave((to, from, next)=>{//離開當前的組件,觸發(fā)
    next()      
  }),
  methods:{
    toPage(){
      //路由跳轉
      this.$router.push(xxx)
    }
  },
  created(){
    //獲取params
    this.$route.params
    //獲取query
    this.$route.query
  }
}
</script>

總結

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

到此這篇關于vue2和vue3的區(qū)別的文章就介紹到這了,更多相關vue2和vue3的區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue.JS實現(xiàn)垂直方向展開、收縮不定高度模塊的JS組件

    Vue.JS實現(xiàn)垂直方向展開、收縮不定高度模塊的JS組件

    這篇文章主要介紹了Vue.JS實現(xiàn)垂直方向展開、收縮不定高度模塊的JS組件,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • vue3?setup語法糖各種語法新特性的使用方法(vue3+vite+pinia)

    vue3?setup語法糖各種語法新特性的使用方法(vue3+vite+pinia)

    這篇文章主要介紹了vue3?setup語法糖各種語法新特性的使用(vue3+vite+pinia),本文主要是記錄vue3的setup語法糖的各種新語法的使用方法,需要的朋友可以參考下
    2022-09-09
  • Vue中的組件及路由使用實例代碼詳解

    Vue中的組件及路由使用實例代碼詳解

    組件系統(tǒng)是 Vue 的一個重要概念,因為它是一種抽象,允許我們使用小型、獨立和通??蓮陀玫慕M件構建大型應用。這篇文章主要介紹了Vue中的組件及路由使用 ,需要的朋友可以參考下
    2019-05-05
  • vue.config.js里面的devserver如何配置

    vue.config.js里面的devserver如何配置

    本文介紹了vue.config.js中devServer的常見配置方式,包括基本配置、代理配置、熱模塊替換、靜態(tài)資源服務、HTTPS配置、多代理配置以及其他配置項,幫助開發(fā)者根據項目需求進行定制
    2025-01-01
  • Vue3?實現(xiàn)網頁背景水印功能的示例代碼

    Vue3?實現(xiàn)網頁背景水印功能的示例代碼

    這篇文章主要介紹了Vue3?實現(xiàn)網頁背景水印功能,這里水印的字體大小、顏色和排布參考了企業(yè)微信的背景水印,使得看起來不那么突兀,需要的朋友可以參考下
    2022-08-08
  • element?ui富文本編輯器的使用效果與步驟(quill-editor)

    element?ui富文本編輯器的使用效果與步驟(quill-editor)

    富文本編輯器在任何項目中都會用到,在Element中我們推薦vue-quill-editor組件,下面這篇文章主要給大家介紹了關于element?ui富文本編輯器的使用效果與步驟(quill-editor)的相關資料,需要的朋友可以參考下
    2022-10-10
  • flutter使用tauri實現(xiàn)一個一鍵視頻轉4K軟件

    flutter使用tauri實現(xiàn)一個一鍵視頻轉4K軟件

    這篇文章主要為大家介紹了flutter使用tauri實現(xiàn)一個一鍵視頻轉4K軟件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • vue項目中使用qrcodesjs2生成二維碼簡單示例

    vue項目中使用qrcodesjs2生成二維碼簡單示例

    最近項目中需生成二維碼,發(fā)現(xiàn)了很好用的插件qrcodesjs2,所以下面這篇文章主要給大家介紹了關于vue項目中使用qrcodesjs2生成二維碼的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Electron自動更新失效報錯Error:?Object?has?been?destroyed的問題解決

    Electron自動更新失效報錯Error:?Object?has?been?destroyed的問題解決

    本文主要講解如何解決?Error:?Object?has?been?destroyed?這個?Electron?中最常見的問題,以及?Electron?自動更新的流程,文中通過代碼示例給大家講解的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Vuex 命名空間 namespaced的使用

    Vuex 命名空間 namespaced的使用

    本文主要介紹了Vuex 命名空間 namespaced的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

衡东县| 富宁县| 葵青区| 隆化县| 大宁县| 济南市| 湛江市| 且末县| 洪泽县| 汉源县| 贵阳市| 杭锦后旗| 洞口县| 城市| 拉萨市| 师宗县| 延边| 昭苏县| 固安县| 阿克苏市| 赤壁市| 唐山市| 曲松县| 巫山县| 阿巴嘎旗| 方正县| 师宗县| 哈尔滨市| 南汇区| 色达县| 溆浦县| 新疆| 桂平市| 新平| 荣昌县| 扎鲁特旗| 长寿区| 尚志市| 隆林| 合肥市| 海林市|