尚硅谷Vue3入門到實戰,最新版vue3+TypeScript前端開發教程

Vue3

編碼規范

創建vue3工程

基于vite創建

快速上手 | Vue.js (vuejs.org)

npm create vue@latest

在nodejs環境下運行進行創建

按提示進行創建

用vscode打開項目

安裝依賴

源文件有src

內有main.ts? App.vue

簡單分析

編寫src

vue2語法在三中適用

vue2中的date? methods語法是

選項式API

setup

setup函數執行的時機

setup執行時機比vue2中的beforecreate還要早

setup函數中的this是undefined? ? ? vue3中已經開始弱化this

數據原來是寫在data中的 ,此時的name、age、tel都不是響應式數據

即,通過下面的方法修改變量,? 變量雖然改變,但頁面沒有變化

setup返回值

小小面試題

Vue3中使用setup和使用data? ? ?methods??

setup和optionAPI的關系

data(methods? ? 下文data代指vue2舊寫法)和setup可以同時存在

且? data中可以訪問setup中的數據,通過this關鍵字

舊寫法可以讀取新寫法中的東西

新寫法無法讀取舊寫法中的東西

vue2中選項式語法可以和vue3 中的新語法setup共存

舊語法可以讀出setup中的東西,setup不可以讀出舊語法中的東西

setup語法糖

省去每次將return放出去數據方法的步驟

這個script標簽是用來配置組件名字

這個script標簽用來配置組合式API

此時有兩個script標簽,且兩個標簽的lang屬性一致

此時只需要在setup 的script標簽內隨意寫數據和方法

若想要將這兩個script標簽寫在一個內

需要借助插件完成

安裝插件

1.npm i vite-plugin-vue-setup-extend -D

-D 是開發依賴的意思

2.修改vite.config.ts文件

響應式數據

ref定義基本類型 的數據

想讓哪個數據成為響應式數據,就給那個數據包裹ref()

模板中不需要.value

js中進行數據操作,需要通過.value調用

name不是響應式的,name.value是響應式的

此時 的 被ref()包裹的name age為refImpl對象

reactive定義對象類型的數據

被reactive包裹的對象類型數據轉變為響應式對象數據

通過控制臺輸出響應式對象可知,為proxy代理對象(數組)? proxy為原生js就有的,叫做代理

原生內置的函數

reactive所定義的對象類型的響應式數據是深層次的?

ref與reactive

表面上是ref定義對象類型數據改為響應式數據,實際上ref遇見對象數組等非基本數據類型,底層是通過reactive實現的

reactive重新分配一個新對象,會失去響應式

此時要是使用object.assign 替換

也就是說重新上傳一個新對象,不能直接對進行了響應式改變的對象直接更改對象

而是通過object的assign 方法實現對象的覆蓋

ref可以通過.value 直接修改對象

toRefs和toRef

把一個響應式結構中的屬性拿出來并且使其具備響應式

toRefs 將對象內的屬性可以多個同步取出并進行ref響應式

toRef(對象,對象其中的一個屬性名)

toRefs(對象)

toRefs解構對象,toRef解構對象的某個屬性

計算屬性

根據已有數據計算出新數據

input表單中的屬性

v-bind:? ?單向綁定

v-model:雙向綁定

方法沒有緩存

計算屬性有緩存

在多次調用fullName是,如果firstName和LastName未改變,則計算屬性執行一次

slice截取

val.split(‘-’)根據這個字符分開成為一個數組

.toUpperCase()字母大寫的方法

計算屬性最終得到的也是一個ref響應式數據

在對fullName進行修改時? .value 修改 的值會在set方法中返回給val

Watch

3.getter函數

Watch監視-情況一

監視ref定義的 基本類型數據

Watch監視-情況二

若想要監視對象內部屬性的變化,需要手動開啟深度監視

?

如果修改的是對象中的屬性,因為所更改的是舊的對象中的屬性,所以oldvalue為原本的對象,又因為更改后的屬性所對應的還是舊屬性,所以newvalue所對應的也是原本更改了屬性的對象,所以這種寫法下,僅修改屬性值,而不修改整個對象的話,oldvalue和newvalue是相同的

實際使用中通常不使用舊值?

?Watch監視-情況三

如果監視的是reactive所定義的數據,底層隱式地創建了深層的監聽

?Watch監視-情況四

監視的屬性為基本數據類型

getter函數,一個函數返回一個值

監視的屬性為對象數據類型

如果直接寫對象的這個對象類型的屬性,只能監視,這個對象類型數據內部的變化,整體對象的改變無法監視

寫函數式返回 這個對象數據類型的屬性? 返回的是地址值,只有當這個屬性整個對象改變時,才會監視,觸發監視函數

中和方案:采用函數書寫,添加深度監視屬性

?Watch監視-情況五

監視上述多個數據

watchEffect

watch? 監視 多個數據 需要將多個數據指出

watchEffect? ?不用明確指出監視的數據(函數中用到哪些屬性,那就監視哪些屬性)

標簽的ref屬性

用于給節點打標識

如何調用dom標簽,使用id調用難免會出現 倆個vue文件中出現標有相同id的html標簽

所以此時通過ref在? 模版中的html標簽內打上ref標簽,內寫上名字,再在js板塊寫

名字=ref()即可實現調用dom元素,且不會出現兩個id重復的情況

ref加在html標簽上,得到的是dom元素

加載組件上,得到的是組件的實例對象,但暴露出的數據需要再組件的vue內進行修改

ref寫在組件標簽上,,最終能獲取組件實例

由于具有保護措施,,打印出的組件實例,沒有實質的內容,

此時需要在? ?組件源文件,兒子端,內調用defineExpose設置暴露給父級的東西

scoped局部樣式無腦加

其他vue文件就再也不怕類名起重復了

回顧TS中的_接口_泛型_自定義類型

TS接口規范的使用

@符在文件路徑時使用,指站在金字塔頂端

限制Persons數組時

使用泛型

泛型什么時候用什么時候寫

自定義類型

props的使用

從父級傳數據

reactive直接傳泛型

defineProps? 函數用于接受數據

標簽內傳入數據的值

傳入數據時,在html標簽中遇到的問題? ? :與否? 決定是表達式還是簡單的字符

vue中的遍歷? ?

數據源中每一項(形參)? ? 數據源

還應添加索引值? ? ?key? ? ?:key可以進行對索引值的 賦值,避免后面遍歷的時候出現問題

沒有key索引值為0-1-2-。。。。。

props的幾種寫法

define為前綴的函數表示該函數為宏函數

不用引入也可以直接使用

生命周期(組件的一生)

Vue2的生命周期

v-if既然不展示,結構給刪了

v-show? ? ? ?結果還在

debugger()

Vue3的生命周期

創建在setup這個中

掛載

掛載前onBeforeMount()

掛載完畢onMounted()

更新

更新前onBeforeUpdate

更新完畢onUpdate()

卸載

卸載前onBeforeUnmount()

卸載完畢onUnmounted()

?最基本八個生命周期

自定義Hooks

Hooks:

mixin

命名:useDog? ?(與狗相關的) useXX? 與XX相關的一部分內容? 被模塊化包裝

Hooks的調用

Hooks本質是一個個可以調用的函數

Hooks內能寫鉤子(生命周期函數)

? ?

組合式API? ? ? ? ? Hooks實現相關內容(數據函數等)模塊化,整合到一起

export default? 后面直接跟值

路由(route)

就是一種對應關系

1.路由就是一組key-value的對應關系

2.多個路由需要經過路由器的管理

spa????????應用? ? 單頁面應用 需要使用路由

路由_基本切換效果

第一步寫出導航區,和展示區

第二步? 請出路由器

制定路由的時候? 一定要想好路由器的工作模式

制定好路由后一定要暴露router

并在main.ts引入router

并使用路由器

此時已經具備路由環境

還應在App。vue文件中添加可視路由模塊

路由_兩個注意點

路由_路由器工作模式

to的兩種寫法

命名路由

路由嵌套

添加子級路由不用填/

路由傳參? query參數

從一個響應式上解構一個屬性,這個屬性丟失響應式

params參數

占位問題

params不能傳對象和數組

params? ? ? ?

不能用path只能用name

路由的props配置

第一種寫法:將路由收到的所有params參數作為props傳給路由組件? ? ? 只能params參數使用

第二種寫法:函數寫法

更加適合query參數,因為params參數用第一種方法更加簡單

第三種寫法:無法進行修改,只有固定數據,使用較少

replace

跳轉的時候有兩種方式

push? 會有歷史記錄,能夠后退

導航區加replace? ? 不能夠后退

編程式路由導航

脫離routerLink實現跳轉頁面

router.push()寫法? ? ? ? ? ? ? ? ?routerLink 中?to能寫什么

重定向

作用:將特定的路徑,重新定向到已有路由。

通常寫在路由設置最下面

pinia

vue.js狀態管理庫

自己定義的ref,需要.value拆包

如果是reactive里面包了一個ref,自動拆包,不需要再.value就能獲取值

5.4修改數據的三種方式

第一種:直覺修改

?

工具中可以看到

第二種:patch批量變更

patch批量變更,在時間線上,多個數據單個修改? ? ? 組件會進行多次修改

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 而使用第二種修改方式? ? 組件只會進行一次patch修改

批量變更

第三種:action

storeToRefs

讀取store數據更加優雅

storeToRefs只關心數據不關心其他的

而使用toRefs會使內部所有屬性被ref包裹

getters的使用

對stroe數據不滿意,對其進行修改

如果用this,不能使用箭頭函數

訂閱subscribe可以監視vueX的修改

只要是store? 身上都有這個subscribe方法

localStorage.setItem('talkList',state.talkList)//瀏覽器的本地存儲

localStorage里面存的都是字符串,如果存的不是字符串

,底層會調用toString

store組合式寫法

選項式

組合式

組件通信

UomgAPI

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

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

相關文章

UnityECS學習中問題及總結entityQuery.ToComponentDataArray和entityQuery.ToEntityArray區別

在Unity的ECS&#xff08;Entity Component System&#xff09;開發中&#xff0c;entityQuery.ToComponentDataArray<T>(Allocator.Temp) 和 entityQuery.ToEntityArray(Allocator.Temp) 是兩種不同的方法&#xff0c;用于從實體查詢中獲取數據。除了泛型參數之外&#…

【深度學習入門篇 ⑤ 】PyTorch網絡模型創建

【&#x1f34a;易編橙&#xff1a;一個幫助編程小伙伴少走彎路的終身成長社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;?o?&#xfe61; ) &#xff01; 易編橙終身成長社群創始團隊嘉賓&#xff0c;橙似錦計劃領銜成員、阿里云專家博主、騰訊云內容共創官…

git、huggingface 學術加速

1、git 有時候服務器不能直接訪問 github&#xff0c;下載代碼會很麻煩&#xff1b;安裝庫的時候&#xff0c;pip xx git 就更難了 比如&#xff0c;這次我需要安裝 unsloth&#xff0c;官方給出的腳本是&#xff1a; pip install “unsloth[cu121-torch220] githttps://git…

【python】函數重構

函數重構 函數重構pycharm函數重構步驟函數重構練習 函數重構 函數重構是指對現有函數進行修改和優化的過程。重構的目的是改善代碼的可讀性、可維護性和靈活性&#xff0c;同時保持其功能不變。函數重構通常包括以下步驟&#xff1a; 理解函數的功能和目的。了解函數的作用和…

OSPF.綜合實驗

1、首先將各個網段基于172.16.0.0 16 進行劃分 1.1、劃分為4個大區域 172.16.0.0 18 172.16.64.0 18 172.16.128.0 18 172.16.192.0 18 四個網段 劃分R4 劃分area2 劃分area3 劃分area1 2、進行IP配置 如圖使用配置指令進行配置 ip address x.x.x.x /x 并且將缺省路由…

Sortable.js板塊拖拽示例

圖例 代碼在圖片后面 點贊??關注&#x1f64f;收藏?? 頁面加載后顯示 拖拽效果 源代碼 由于js庫使用外鏈&#xff0c;所以會加載一會兒 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&qu…

【Go系列】 Go的錯誤處理

承上啟下 上一篇文章中介紹了struct和interface&#xff0c;在Go語言中&#xff0c;是沒有Class這個概念的&#xff0c;我們可以通過Struct和方法的組合&#xff0c;來實現Class。我們通過Struct嵌套來實現繼承這樣的一種機制&#xff0c;并且不用設置虛函數這樣的特殊說明。同…

如何防止第三方DLL注入自己的進程?

PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY 結構 struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {union {DWORD Flags;struct {DWORD MicrosoftSignedOnly : 1;DWORD StoreSignedOnly : 1;DWORD MitigationOptIn : 1;DWORD AuditMicrosoftSignedOnly : 1;DWORD Audit…

C語言 ——— 實用調試技巧(Visual Studio)

目錄 Debug 和 Release 的區別 F10 --- 逐過程調試 & F11 --- 逐語句調試 F9 --- 新建/切換斷點 & F5 --- 開始調試 shift F5 & ctrl F5 Debug 和 Release 的區別 Debug&#xff1a;通常為調試版本&#xff0c;它包含調試信息&#xff0c;并且不作任何優化…

一 GD32 MCU 開發環境搭建

GD32 系列為通用型 MCU &#xff0c;所以開發環境也可以使用通用型的 IDE &#xff0c;目前使用較多的是 KEIL、 IAR 、 GCC 和 Embedded Builder &#xff0c;客戶可以根據個人喜好來選擇相應的開發環境。 目錄 1、使用 Keil 開發 GD32 目前市面通用的MDK for ARM版本有Kei…

華為OD機試真題2024版-路口最短時間問題

題目描述 假定街道是棋盤型的&#xff0c;每格距離相等&#xff0c;車輛通過每格街道需要時間均為 timePerRoad&#xff1b; 街道的街口&#xff08;交叉點&#xff09;有交通燈&#xff0c;燈的周期 T(lights[row][col]) 各不相同&#xff1b; 車輛可直行、左轉和右轉&…

企業網三層架構

企業網三層架構&#xff1a;是一種層次化模型設計&#xff0c;旨在將復雜的網絡設計分成三個層次&#xff0c;每個層次都著重于某些特定的功能&#xff0c;以提高效率和穩定性。 企業網三層架構層次&#xff1a; 接入層&#xff1a;使終端設備接入到網絡中來&#xff0c;提供…

Python爬蟲教程第二篇:進階技巧與實戰案例

Python爬蟲教程第二篇&#xff1a;進階技巧與實戰案例 在上一篇教程中&#xff0c;我們學習了Python爬蟲的基礎概念、基本流程以及一個簡單的入門實踐案例。本篇教程將帶領大家進一步探索Python爬蟲的進階技巧&#xff0c;并提供一個實戰案例&#xff0c;幫助大家提升爬蟲技能…

Android12 MultiMedia框架之GenericSource extractor

前面兩節學習到了各種Source的創建和extractor service的啟動&#xff0c;本節將以本地播放為例記錄下GenericSource是如何創建一個extractor的。extractor是在PrepareAsync()方法中被創建出來的&#xff0c;為了不過多贅述&#xff0c;我們直接從GenericSource的onPrepareAsyn…

Mojolicious命令行工具:自動化Web開發的瑞士軍刀

Mojolicious是一個高性能的、基于Perl的Web開發框架&#xff0c;它提供了一整套工具來簡化Web開發流程。其中&#xff0c;Mojolicious的命令行工具集是其強大功能的一部分&#xff0c;允許開發者快速生成項目模板、運行開發服務器、執行各種開發任務等。本文將詳細介紹Mojolici…

qt 自定義信號號槽 簡單舉例

在Qt中&#xff0c;自定義信號和槽是一種非常靈活的方式來處理對象之間的通信。以下是一個簡單的例子&#xff0c;展示了如何定義和使用自定義的信號和槽。 首先&#xff0c;我們定義一個名為MyClass的類&#xff0c;該類繼承自QObject&#xff0c;并聲明一個自定義信號和一個…

13_Shell系統函數

13_Shell系統函數和自定義函數 一、系統函數 basename 獲取文件名 #!/bin/bash#basename 相對路徑文件名 basename ./1.sh#basename 絕對路徑文件名 basename /tmp/1.sh#basename 去除文件后綴名 basename /tmp/1.sh .shdirname 獲取文件所在目錄名 #!/bin/bash#dirname 相對路…

Redis持久化RDB,AOF

目 錄 CONFIG動態修改配置 慢查詢 持久化 在上一篇主要對redis的了解入門&#xff0c;安裝&#xff0c;以及基礎配置&#xff0c;多實例的實現&#xff1a;redis的安裝看我上一篇&#xff1a; Redis安裝部署與使用,多實例 redis是擋在MySQL前面的&#xff0c;運行在內存…

Week 6-楊帆-學習總結

- 46 語義分割和數據集 語義分割概念 語義分割是一種計算機視覺任務&#xff0c;其目標是將圖像分割成屬于不同語義類別的區域。與目標檢測不同&#xff0c;語義分割關注的是像素級別的標注和預測&#xff0c;能夠識別并理解圖像中每一個像素的內容。這使得語義分割在理解圖像…

產品經理-研發流程-敏捷開發-迭代-需求評審及產品規劃(15)

敏捷開發是以用戶的需求進化為核心&#xff0c;采用迭代、循序漸進的方法進行軟件開發。 通俗來說&#xff0c;敏捷開發是一個軟件開發流程&#xff0c;是一個采用了迭代方法的開發流程 簡單來說&#xff0c;迭代就是把一個大產品拆分出一些最小的實現單位。完成不同的迭代就最…