vue2使用筆記、vue2和vue3的區別

文章目錄

    • vue2和vue3的區別
      • 1. 實現數據響應式的原理不同
      • 2. 生命周期不同
      • 3. vue 2.0 采用了 option 選項式 API,vue 3.0 采用了 composition 組合式 API
      • 4. 新特性編譯宏
      • 5. 父子組件間雙向數據綁定 v-model 不同
      • 6. v-for 和 v-if 優先級不同
      • 7. 使用的 diff 算法不同
      • 8. 兄弟組件間的通信 eventBus
      • 9. vue 3.0 提供了 TypeScript 支持
      • 10. 腳手架不同
      • 11. 獲取 DOM 的方法不同
      • 12. vue-router 的使用細節
      • 13. vuex 與 pinia
      • 14. vue 3.0 廢除了 filters 過濾器的使用
      • 15. template 模版中根標簽的問題
      • 16. 語法細節的不同

vue2.0和3.0語法不同,使用時一定要先看版本。
現在主流都是用3.0,所以2.0單獨拿出來。

vue2和vue3的區別

1. 實現數據響應式的原理不同

① vue 2.0:
通過 es5 的語法 Object.defineProperty(),數據劫持的方式實現數據的響應式。
② vue 3.0:
通過 Proxy 代理對象的方式實現數據的響應式。
因此,又多了一些定義響應式數據的方法,如 ref、reactive、roRef、toRefs。
ref:接收簡單類型或者對象類型的數據傳入并返回一個響應式的對象。(RefImpl)修改值,獲取值的時候,需要.value。
reactive:接受對象類型數據的參數傳入并返回一個代理響應式的對象。(Proxy)
toRef:轉換響應式對象中某個屬性為單獨響應式數據,并且值是關聯的。
toRefs:轉換響應式對象中所有屬性為單獨響應式數據,并且值是關聯的。

2. 生命周期不同

① vue 2.0 一共 10 個生命周期
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated:keep-alive 組件緩存技術,激活
deactivated:keep-alive 組件緩存技術,未激活
beforeDestroy
destroyed

② vue 3.0 一共 7 個生命周期
setup
onBeforeMount
onMounted
onBeforeUpdate
onUpdated
onBeforeUnmount
onUnmounted
總結:
廢棄了 activated、deactivated 生命周期函數。
setup 函數是整個組件的起點,執行時機在 beforeCreate 之前,所以沒有辦法拿到當前組件實例 this。
但是 setup 函數里可以接收兩個形參 props 和 context。
props 為屬性
context 為當前組件實例,也是就相當于vue 2.0 中的 this。
vue 3.0 中的生命周期函數使用函數調用的方式執行,所以可以多次調用執行。

3. vue 2.0 采用了 option 選項式 API,vue 3.0 采用了 composition 組合式 API

① option API

數據定義在 data 里,屬性定義在 props 里,計算屬性定義在 computed 里,方法定義在 methods 里。
相較于 vue 3.0 則更易于學習和使用。
② composition API

一個功能邏輯的代碼組合在一起。
相較于 vue 2.0 更易于閱讀和維護。
小插曲,談一談自己對于 vue 2.0 和 vue 3.0 的選項式 API 和組合式 API 的理解:

vue 3.0 是在 2020 年 10 月發布的。由于寫 vue 2.0 的時間比較早,所以當時在轉入 vue 3.0 的時候,并沒有花太多時間。感受最深的一點就是,在 vue 3.0 中無法使用 this,前文已經談過 this 的問題,在這里不再贅述。而 vue 3.0 也可以分為兩個版本,vue 3.3 以下的版本,其實感覺還是 option API 的寫法,因為在 setup 函數平級的節點中,依然可以定義 props 和 components 節點,只不過是把數據和方法定義在 setup 函數里,然后通過 return 出來使用。

在 vue 3.3 及 3.3 以上的版本中,引入了

4. 新特性編譯宏

常用的編譯宏如下:

defineProps:定義屬性
defineEmits:定義自定義的事件的觸發

defineExpose:向外暴露組件的屬性和方法

在非語法糖的寫法中,通過 setup 函數的 return 出來了屬性和方法,所以無須使用defineExpose

defineOptions:向外暴露組件的一些自定義屬性,如 name

defineModel:vue 3.0 中父子組件間的雙向數據綁定

const modelValue = defineModel()

5. 父子組件間雙向數據綁定 v-model 不同

① vue 2.0:

父組件默認傳遞的屬性是 value,子組件默認觸發的自定義事件是 input
② vue 3.0:

父組件默認傳遞的屬性是 modelValue,子組件默認觸發的自定義事件是 update:modelValue

6. v-for 和 v-if 優先級不同

vue 2.0 中 v-for 的優先級高
vue 3.0 中 v-if 的優先級高

7. 使用的 diff 算法不同

① vue 2.0

同級比較,根元素變化,整個 dom 樹刪除重建
根元素未變
屬性改變,更新屬性
子元素內容改變
無 key 就地更新
有 key 按 key 比較
② vue 3.0

將靜態節點與動態節點分離
通過高效標記和打補丁的方式,更新 dom
總結:

所以 vue 3.0 的渲染性能優于 vue 2.0

8. 兄弟組件間的通信 eventBus

vue 2.0 中的 eventBus 是一個 vue 的實例對象
vue 3.0 中的eventBus 是 mitt 庫

9. vue 3.0 提供了 TypeScript 支持

10. 腳手架不同

vue 2.0 的打包工具是 webpack
vue 3.0 的打包工具是 vite

11. 獲取 DOM 的方法不同

vue 2.0 直接綁定 ref,使用 this.ref.屬性名的方式直接獲取
vue 3.0 需要先定義 const box = ref(null),再進行綁定

12. vue-router 的使用細節

① vue 2.0

通過 this. r o u t e r 和 t h i s . router 和 this. routerthis.route 拿到全局的路由對象和當前的路由對象
路由前置守衛
to: 即將要進入的目標 路由對象
from:當前導航正要離開的路由
next: Function: 一定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。
next(): 放行路由跳轉
next(false):攔截路由跳轉
const router = new VueRouter({ … })

router.beforeEach((to, from, next) => {
// …
})
② vue 3.0

通過 const router = useRouter() 和 const route = useRoute() 拿到全局的路由對象和當前的路由對象
路由前置守衛
少了 next
return false 攔截回 from 的地址頁面
return undefined / true 直接放行

const router = createRouter({ … })

router.beforeEach((to, from) => {
// …
// 返回 false 以取消導航
return false
})

13. vuex 與 pinia

① vue 2.0 vuex

state 定義數據
mutations 執行同步代碼,修改 state 中的數據必須通過 mutations,在組件中通過 commit 提交 mutation 的方式
actions 執行異步操作,在組件中通過中通過 dispatch 派遣 action 的方式
getters 類似于 computed 計算屬性或者過濾器
modules 模塊化
② vue 3.0 pinia

將 mutations 和 actions 合二為一,不在區分同步和異步操作,去掉了 modules 模塊化的概念,每一個 store 都是一個獨立的模塊
提供了豐富的插件配置及配置對象,如在實現數據本地持久化上,可以通過插件直接配置 persist: true就可以直接實現。
當時寫 vue 2.0 的項目,記得是自己封裝了一個 get、set 操作 localstorage 的方法去實現本地數據的持久化

14. vue 3.0 廢除了 filters 過濾器的使用

15. template 模版中根標簽的問題

vue 2.0 中必須有一個根標簽元素,vue 3.0 則不用

16. 語法細節的不同

此外就是一些語法上的使用細節,不做深入比較闡述了。
如:vue 3.0 一般是通過 Createxxx 創建實例
CreateApp 創建 vue 實例,2.0代碼:

// app.js
new Vue({el: '#app', // 指定 Vue 實例掛載的元素data: {message: 'Hello Vue!' // 定義數據對象}
});

CreateRouter 創建路由對象,2.0代碼:

import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);

CreatePinia 創建 pinia。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83501.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS3美化頁面元素

1. 字體 <span>標簽 字體樣式? 字體類型&#xff08;font-family&#xff09; 字體大小&#xff08;font-size&#xff09; 字體風格&#xff08;font-style&#xff09; 字體粗細&#xff08;font-weight&#xff09; 字體屬性&#xff08;font&#xff09; 2. 文本 文…

【筆記】Windows 下載并安裝 ChromeDriver

以下是 在 Windows 上下載并安裝 ChromeDriver 的筆記&#xff1a; ? Windows 下載并安裝 ChromeDriver 1?? 確認 Chrome 瀏覽器版本 打開 Chrome 瀏覽器 點擊右上角 ? → 幫助 → 關于 Google Chrome 記下版本號&#xff0c;例如&#xff1a;114.0.5735.199 2?? 下載…

工廠模式 vs 策略模式:設計模式中的 “創建者” 與 “決策者”

在日常工作里&#xff0c;需求變動或者新增功能是再常見不過的事情了。而面對這種情況時&#xff0c;那些耦合度較高的代碼就會給我們帶來不少麻煩&#xff0c;因為在這樣的代碼基礎上添加新需求往往困難重重。為了保證系統的穩定性&#xff0c;我們在添加新需求時&#xff0c;…

Java web學習路徑預覽

Java web學習路徑預覽 &#xff08;圖源&#xff1a;黑馬程序員&#xff09; 目錄 Java web學習路徑預覽 一、HTML、CSS、JS 1. HTML (HyperText Markup Language): 網頁的骨架 2. CSS (Cascading Style Sheets): 網頁的皮膚 3. JavaScript (JS): 網頁的行為 二、Ajax、…

linux、docker、git相關操作

1 linux 1.1解壓縮 1.1.1 zip zip xxx.zip file 把名為fle的文件壓縮成xxx.zip -r 遞歸壓縮&#xff1a;加上該選項才能壓縮文件夾 zip -r example_new.zip 示例集 # 新建壓縮包并命名為 example_new.zip zip -r xxx.zip file1 file2 dir1 將多個文件目錄壓成zip包 unzip fi…

Attention Is All You Need (Transformer) 以及Transformer pytorch實現

參考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是當今深度學習初學者必讀的一篇論文。 一. Attention Is All You Need (Transformer) 論文精讀 1. 知識準備 機器翻譯&#xff0c;就是將某種語言的一段文字翻譯成另一段文字。 由…

深入淺出:Oracle 數據庫 SQL 執行計劃查看詳解(1)——基礎概念與查看方式

背景 在當今的軟件開發領域&#xff0c;盡管主流開發模式往往傾向于采用單表模式&#xff0c;力圖盡可能地減少表之間的連接操作&#xff0c;以期達到提高數據處理效率、簡化應用邏輯等目的。然而&#xff0c;對于那些已經上線運行多年的運維老系統而言&#xff0c;它們內部往…

每天掌握一個Linux命令 - fail2ban

Linux 命令工具 fail2ban 使用指南 目錄 Linux 命令工具 fail2ban 使用指南一、工具概述二、安裝方式1. 包管理器安裝&#xff08;推薦&#xff09;Debian/Ubuntu 系統CentOS/RHEL 系統Arch Linux 系統 2. 手動編譯安裝&#xff08;適用于自定義需求&#xff09; 三、核心功能四…

互聯網大廠智能體平臺體驗筆記字節扣子羅盤、阿里云百煉、百度千帆 、騰訊元器、TI-ONE平臺、云智能體開發平臺

互聯網大廠 字節扣子、阿里云百煉、百度千帆 、騰訊元器、TI-ONE平臺、云智能體開發平臺 體驗 開始動手 了解 智能體&#xff0c;發現已經落后時代太遠 光頭部互聯網大廠對開 公開的平臺就已經這么多&#xff0c;可以學習和了解&#xff0c;相關的信息 整理了對應的平臺地址…

ansible-playbook 進階 接上一章內容

1.異常中斷 做法1&#xff1a;強制正常 編寫 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…

LRC and VIP

//首先排除所有數相等的情況,再把最大值放在一個組&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判斷剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…

企業應用AI對向量數據庫選型思考

一、向量數據庫概述 向量數據庫是一種專門用于存儲和檢索高維向量數據的數據庫系統&#xff0c;它能夠高效地處理基于向量相似性的查詢&#xff0c;如最近鄰搜索等&#xff0c;在人工智能、機器學習等領域的應用中發揮著重要作用&#xff0c;為處理復雜的向量數據提供了有力的…

設計模式——迭代器設計模式(行為型)

摘要 本文詳細介紹了迭代器設計模式&#xff0c;這是一種行為型設計模式&#xff0c;用于順序訪問集合對象中的元素&#xff0c;同時隱藏集合的內部結構。文章首先定義了迭代器設計模式并闡述了其核心角色&#xff0c;包括迭代器接口、具體迭代器、容器接口和具體容器。接著&a…

Java8 list集合根據屬性分組

在Java8中&#xff0c;可以使用Collectors.groupingBy方法對List集合根據屬性進行分組。以下是一個完整的示例&#xff0c;展示如何根據對象的不同屬性分組。 根據對象屬性分組 假設有一個Student類&#xff0c;包含name、age和grade屬性&#xff1a; public class Student …

更新已打包好的 Spring Boot JAR 文件中的 class 文件

# 1. 解壓原始 JAR unzip -q original-app.jar -d temp # 2. 替換 class 文件 cp ~/projects/new-classes/*.class temp/BOOT-INF/classes/com/example/ # 3. 保留原始清單 cp temp/META-INF/MANIFEST.MF . # 4. 重新打包 jar -cf0m new-app.jar MANIFEST.MF -C temp/ . # …

《HelloGitHub》第 110 期

興趣是最好的老師&#xff0c;HelloGitHub 讓你對開源感興趣&#xff01; 簡介 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。 github.com/521xueweihan/HelloGitHub 這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等&#xff0c;涵蓋多種編程語言 Python、…

當 “歐洲版 Cursor” 遇上安全危機

在 AI 編程助手蓬勃發展的當下&#xff0c;安全問題正成為行業不容忽視的隱憂。近期&#xff0c;AI 編程助手公司 Replit 與號稱 “歐洲版 Cursor” 的 Lovable 之間&#xff0c;因安全漏洞問題掀起了一場風波&#xff0c;引發了業界的廣泛關注。? Replit 的員工 Matt Palmer…

centos掛載目錄滿但實際未滿引發系統宕機

測試服務器應用系統突然掛了&#xff0c;經過排查發現是因為磁盤“滿了”導致的&#xff0c;使用df -h查看磁盤使用情況/home目錄使用率已經到了100%,但使用du -sh /home查看發現實際磁盤使用還不到1G&#xff0c;推測有進程正在寫入或占用已刪除的大文件&#xff08;Linux 系統…

乾坤qiankun的使用

vue2 為主應用 react 為子應用 在項目中安裝乾坤 yarn add qiankun # 或者 npm i qiankun -Svue主應用 在main.js中新增 &#xff08;需要注意的是路由模型為history模式&#xff09; registerMicroApps([{name: reactApp,entry: //localhost:3011,container: #container,/…

PostgreSQL的擴展 auth_delay

PostgreSQL的擴展 auth_delay auth_delay 是 PostgreSQL 提供的一個安全相關擴展&#xff0c;主要用于防止暴力破解攻擊。它通過在認證失敗后引入人為延遲來增加暴力破解的難度。 一、擴展基礎 功能&#xff1a;在認證失敗后增加延遲目的&#xff1a;減緩暴力破解和字典攻擊…