Vue3無廢話,快速上手

在這里插入圖片描述

Vue3無廢話,快速上手

認識Vue3

1. Vue2 選項式 API vs Vue3 組合式API

<script>
export default {data(){return {count:0}},methods:{addCount(){this.count++}}
}
</script>
<script setup>
import { ref } from 'vue'
const count = ref(0)
const addCount = ()=> count.value++
</script>

特點:

  1. 代碼量變少
  2. 分散式維護變成集中式維護

2. Vue3的優勢

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

使用create-vue搭建Vue3項目

1. 認識create-vue

create-vue是Vue官方新的腳手架工具,底層切換到了 vite (下一代前端工具鏈),為開發提供極速響應

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. 使用create-vue創建項目

前置條件 - 已安裝16.0或更高版本的Node.js

執行如下命令,這一指令將會安裝并執行 create-vue

npm init vue@latest

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

熟悉項目和關鍵文件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

組合式API - setup選項

1. setup選項的寫法和執行時機

寫法

<script>export default {setup(){},beforeCreate(){}}
</script>

執行時機

在beforeCreate鉤子之前執行

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. setup中寫代碼的特點

在setup函數中寫的數據和方法需要在末尾以對象的方式return,才能給模版使用

<script>export default {setup(){const message = 'this is message'const logMessage = ()=>{console.log(message)}// 必須return才可以return {message,logMessage}}}
</script>

3.

script標簽添加 setup標記,不需要再寫導出語句,默認會添加導出語句

<script setup>const message = 'this is message'const logMessage = ()=>{console.log(message)}
</script>

組合式API - reactive和ref函數

1. reactive

接受對象類型數據的參數傳入并返回一個響應式的對象

<script setup>// 導入import { reactive } from 'vue'// 執行函數 傳入參數 變量接收const state = reactive({msg:'this is msg'})const setSate = ()=>{// 修改數據更新視圖state.msg = 'this is new msg'}
</script><template>{{ state.msg }}<button @click="setState">change msg</button>
</template>

2. ref

接收簡單類型或者對象類型的數據傳入并返回一個響應式的對象

<script setup>// 導入import { ref } from 'vue'// 執行函數 傳入參數 變量接收const count = ref(0)const setCount = ()=>{// 修改數據更新視圖必須加上.valuecount.value++}
</script><template><button @click="setCount">{{count}}</button>
</template>

3. reactive 對比 ref

  1. 都是用來生成響應式數據
  2. 不同點
    1. reactive不能處理簡單類型的數據
    2. ref參數類型支持更好,但是必須通過.value做訪問修改
    3. ref函數內部的實現依賴于reactive函數
  3. 在實際工作中的推薦
    1. 推薦使用ref函數,減少記憶負擔,小兔鮮項目都使用ref

組合式API - computed

計算屬性基本思想和Vue2保持一致,組合式API下的計算屬性只是修改了API寫法

<script setup>
// 導入
import {ref, computed } from 'vue'
// 原始數據
const count = ref(0)
// 計算屬性
const doubleCount = computed(()=>count.value * 2)// 原始數據
const list = ref([1,2,3,4,5,6,7,8])
// 計算屬性list
const filterList = computed(item=>item > 2)
</script>

組合式API - watch

偵聽一個或者多個數據的變化,數據變化時執行回調函數,倆個額外參數 immediate控制立刻執行,deep開啟深度偵聽

1. 偵聽單個數據

<script setup>// 1. 導入watchimport { ref, watch } from 'vue'const count = ref(0)// 2. 調用watch 偵聽變化watch(count, (newValue, oldValue)=>{console.log(`count發生了變化,老值為${oldValue},新值為${newValue}`)})
</script>

2. 偵聽多個數據

偵聽多個數據,第一個參數可以改寫成數組的寫法

<script setup>// 1. 導入watchimport { ref, watch } from 'vue'const count = ref(0)const name = ref('cp')// 2. 調用watch 偵聽變化watch([count, name], ([newCount, newName],[oldCount,oldName])=>{console.log(`count或者name變化了,[newCount, newName],[oldCount,oldName])})
</script>

3. immediate

在偵聽器創建時立即出發回調,響應式數據變化之后繼續執行回調

<script setup>// 1. 導入watchimport { ref, watch } from 'vue'const count = ref(0)// 2. 調用watch 偵聽變化watch(count, (newValue, oldValue)=>{console.log(`count發生了變化,老值為${oldValue},新值為${newValue}`)},{immediate: true})
</script>

4. deep

通過watch監聽的ref對象默認是淺層偵聽的,直接修改嵌套的對象屬性不會觸發回調執行,需要開啟deep

<script setup>// 1. 導入watchimport { ref, watch } from 'vue'const state = ref({ count: 0 })// 2. 監聽對象statewatch(state, ()=>{console.log('數據變化了')})const changeStateByCount = ()=>{// 直接修改不會引發回調執行state.value.count++}
</script><script setup>// 1. 導入watchimport { ref, watch } from 'vue'const state = ref({ count: 0 })// 2. 監聽對象state 并開啟deepwatch(state, ()=>{console.log('數據變化了')},{deep:true})const changeStateByCount = ()=>{// 此時修改可以觸發回調state.value.count++}
</script>

組合式API - 生命周期函數

1. 選項式對比組合式

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. 生命周期函數基本使用

  1. 導入生命周期函數
  2. 執行生命周期函數,傳入回調
<scirpt setup>
import { onMounted } from 'vue'
onMounted(()=>{// 自定義邏輯
})
</script>

3. 執行多次

生命周期函數執行多次的時候,會按照順序依次執行

<scirpt setup>
import { onMounted } from 'vue'
onMounted(()=>{// 自定義邏輯
})onMounted(()=>{// 自定義邏輯
})
</script>

組合式API - 父子通信

1. 父傳子

基本思想

  1. 父組件中給子組件綁定屬性
  2. 子組件內部通過props選項接收數據

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. 子傳父

基本思想

  1. 父組件中給子組件標簽通過@綁定事件
  2. 子組件內部通過 emit 方法觸發事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

組合式API - 模版引用

概念:通過 ref標識 獲取真實的 dom對象或者組件實例對象

1. 基本使用

實現步驟:

  1. 調用ref函數生成一個ref對象
  2. 通過ref標識綁定ref對象到標簽

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. defineExpose

默認情況下在

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

組合式API - provide和inject

1. 作用和場景

頂層組件向任意的底層組件傳遞數據和方法,實現跨層組件通信

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2. 跨層傳遞普通數據

實現步驟

  1. 頂層組件通過 provide 函數提供數據
  2. 底層組件通過 inject 函數提供數據

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

3. 跨層傳遞響應式數據

在調用provide函數時,第二個參數設置為ref對象

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

4. 跨層傳遞方法

頂層組件可以向底層組件傳遞方法,底層組件調用方法修改頂層組件的數據

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

Vue3.3 新特性-defineOptions

背景說明:

但是用了


為了解決這一問題,引入了 defineProps 與 defineEmits 這兩個宏。但這只解決了 props 與 emits 這兩個屬性。

如果我們要定義組件的 name 或其他自定義的屬性,還是得回到最原始的用法——再添加一個普通的

這樣就會存在兩個


所以在 Vue 3.3 中新引入了 defineOptions 宏。顧名思義,主要是用來定義 Options API 的選項。可以用 defineOptions 定義任意的選項, props, emits, expose, slots 除外(因為這些可以使用 defineXXX 來做到)

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

Vue3.3新特性-defineModel

在Vue3中,自定義組件上使用v-model, 相當于傳遞一個modelValue屬性,同時觸發 update:modelValue 事件

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

我們需要先定義 props,再定義 emits 。其中有許多重復的代碼。如果需要修改此值,還需要手動調用 emit 函數。

于是乎 defineModel 誕生了。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

生效需要配置 vite.config.js

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue({script: {defineModel: true}}),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}
})

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

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

相關文章

【c++隨筆16】reserve之后,使用std::copy會崩潰?

【c隨筆16】reserve之后&#xff0c;使用std::copy會崩潰? 一、reserve之后&#xff0c;使用std::copy會崩潰?二、函數std::reserve、std::resize、std::copy1、std::resize&#xff1a;2、std::reserve&#xff1a;3、std::copy&#xff1a; 三、崩潰原因分析方案1、你可以使…

機器學習 | Python貝葉斯超參數優化模型答疑

機器學習 | Python貝葉斯超參數優化模型答疑 目錄 機器學習 | Python貝葉斯超參數優化模型答疑問題匯總問題1答疑問題2答疑問題3答疑問題匯總 問題1:想問一下貝葉斯優化是什么? 問題2:為什么使用貝葉斯優化? 問題3:如何實現? 問題1答疑 超參數優化在大多數機器學習流水線…

淺析不同NAND架構的差異與影響

SSD的存儲介質是什么&#xff0c;它就是NAND閃存。那你知道NAND閃存是怎么工作的嗎&#xff1f;其實&#xff0c;它就是由很多個晶體管組成的。這些晶體管里面存儲著電荷&#xff0c;代表著我們的二進制數據&#xff0c;要么是“0”&#xff0c;要么是“1”。NAND閃存原理上是一…

安卓11修改power按鍵功能

客戶需要把power鍵的短按休眠功能去除&#xff0c;并且把長按功能改成直接關機&#xff0c;我們先分析系統framework層處理按鍵的代碼&#xff1a; interceptKeyBeforeQueueing power按鍵上來都會直接走這里&#xff0c;我們找到power按鍵處理的地方如下&#xff1a; case KeyE…

開啟數據庫性能之旅:MSSQL存儲過程索引優化深度解析

數據庫&#xff0c;如同一座龐大的圖書館&#xff0c;蘊藏著無數寶貴的信息。然而&#xff0c;想要在這個海量數據的世界中迅捷而準確地找到所需&#xff0c;索引就成為了至關重要的引路人。本文將引領讀者深入探討MSSQL存儲過程中索引優化的奧妙&#xff0c;揭示數據庫性能提升…

Spring日志完結篇,MyBatis操作數據庫(入門)

目錄 Spring可以對日志進行分目錄打印 日志持久化&#xff08;讓日志進行長期的保存&#xff09; MyBatis操作數據庫(優秀的持久層框架) MyBatis的寫法 開發規范&#xff1a; 單元測試的寫法 傳遞參數 Spring可以對日志進行分目錄打印 他的意思是說spring相關只打印INFO…

mysql中的DQL查詢

表格為&#xff1a; DQL 基礎查詢 語法&#xff1a;select 查詢列表 from 表名&#xff1a;&#xff08;查詢的結果是一個虛擬表格&#xff09; -- 查詢指定的列 SELECT NAME,birthday,phone FROM student -- 查詢所有的列 * 所有的列&#xff0c; 查詢結果是虛擬的表格&am…

中國各省、市鄉村振興水平數據(附stata計算代碼,2000-2022)

數據簡介&#xff1a;鄉村振興是當下經濟學研究的熱點之一&#xff0c;對鄉村振興進行測度&#xff0c;是研究基礎。測度鄉村振興水平的學術論文廣泛發表在《數量經濟技術經濟研究》等頂刊上。數據來源&#xff1a;主要來源于《中國農村統計年鑒》、《中國人口和就業統計年鑒》…

CRM系統選擇技巧,什么樣的CRM系統好用?

SaaS行業發展迅速&#xff0c;更多的企業逐漸選擇CRM管理系統。打開搜索引擎&#xff0c;有非常多的結果。怎樣在數十萬個搜索結果中選擇適合您的CRM系統&#xff1f;下面我們將聊聊&#xff0c;怎樣選擇CRM系統。 第一步&#xff1a;明確自身需求 重要性&#xff1a;每家企業…

仿照MyBatis手寫一個持久層框架學習

首先數據準備&#xff0c;創建MySQL數據庫mybatis&#xff0c;創建表并插入數據。 DROP TABLE IF EXISTS user_t; CREATE TABLE user_t ( id INT PRIMARY KEY, username VARCHAR ( 128 ) ); INSERT INTO user_t VALUES(1,Tom); INSERT INTO user_t VALUES(2,Jerry);JDBC API允…

深入理解Java虛擬機----內存區域的劃分

Java虛擬機在執行Java程序的過程時&#xff0c;會將它管理的內存劃分為若干個不同的數據區域。主要分為以下幾個區域&#xff1a; 程序計數器 當前線程所執行的字節碼的行號指示器。字節碼解釋器工作時通過改變程序計數器來選取下一條需要執行的字節碼指令&#xff0c;分支、循…

nginx中Include使用

1.include介紹 自己的理解&#xff1a;如果學過C語言的話&#xff0c;感覺和C語言中的Include引入是一樣的&#xff0c;引入的文件中可以寫任何東西&#xff0c;比如server相關信息&#xff0c;相當于替換的作用&#xff0c;一般情況下server是寫在nginx.conf配置文件中的&…

VR串流線方案:實現同時充電傳輸視頻信號

VR&#xff08;Virtual Reality&#xff09;&#xff0c;俗稱虛擬現實技術&#xff0c;是一項具有巨大潛力的技術創新&#xff0c;正在以驚人的速度改變我們的生活方式和體驗&#xff0c;利用專門設計的設備&#xff0c;如頭戴式顯示器&#xff08;VR頭盔&#xff09;、手柄、定…

idea 本身快捷鍵ctrl+d復制 無法像eclipse快捷鍵ctrl+alt+上下鍵,自動換行格式問題解決

問題 例如我使用ctrld 想復制如下內容 復制效果如下&#xff0c;沒有自動換行&#xff0c;還需要自己在進行調整 解決 讓如下快捷鍵第一個刪除 修改成如下&#xff0c;將第二個添加ctrld 提示&#xff1a;對應想要修改的item&#xff0c;直接右鍵&#xff0c;remove是刪…

分子生成領域的stable diffusion - GEOLDM

一、關于stable diffusion 很多人都知道stable diffusion&#xff0c;stable diffusion的出現改變了機器生成領域&#xff0c;讓AI技術第一次無比的接近正常人。大語言模型&#xff0c;AIGC概念于是興起。基于stable diffusion 大家開發了lora&#xff0c; hyperwork等微調技術…

[GWCTF 2019]我有一個數據庫1

提示 信息收集phpmyadmin的版本漏洞 這里看起來不像是加密應該是編碼錯誤 這里訪問robots.txt 直接把phpinfo.php放出來了 這里能看到它所有的信息 這里并沒有能找到可控點 用dirsearch掃了一遍 ####注意掃描buuctf的題需要控制掃描速度&#xff0c;每一秒只能掃10個多一個都…

聚類算法的性能度量

聚類算法的性能度量 聚類算法就是根據數據中樣本與樣本之間的距離或相似度&#xff0c;將樣本劃分為若干組&#xff0f;類&#xff0f;簇&#xff0c;其劃分的原則&#xff1a;簇內樣本相似、簇間樣本不相似&#xff0c;聚類的結果是產生一個簇的集合。 其劃分方式主要分為兩…

API接口并發測試:如何測試API接口的最大并發能力?

本文將深入探討API接口并發測試&#xff0c;介紹并比較不同的API并發測試工具&#xff0c;并分享如何有效測量和提高API接口在最大并發情況下的性能。了解如何應對高并發壓力是保證系統穩定性和用戶滿意度的關鍵&#xff0c;讓我們一起來探索這個重要的話題。 隨著互聯網的迅速…

float,flex和grid布局

頁面布局往往會影響著整體的結構與項目的樣式&#xff0c;通常我們用的布局方式有三種&#xff1a;float,flex,grid 1.float或position布局 1.1概念 首先對于一個頁面來說&#xff0c;有浮動流&#xff0c;文檔流&#xff0c;文本流這幾種模式&#xff0c;而float布局則是…

【EI會議征稿中】第六屆下一代數據驅動網絡國際學術會議(NGDN 2024)

第六屆下一代數據驅動網絡國際學術會議&#xff08;NGDN 2024&#xff09; The Sixth International Conference on Next Generation Data-driven Networks 基于前幾屆在英國埃克塞特 (ISPA 2020) 、中國沈陽 (TrustCom 2021) 和中國武漢 (IEEETrustCom-2022)成功舉辦的經驗&a…