Vue生命周期以及自定義鉤子和路由

? ? ? ? Vue生命周期常用的onMounted掛載后執行和onUnmounted卸載前以及onupdated更新后實際上用react對比就是useEffect,而且掛載順序也是子組件先于父組件然后往外的棧結構,先進后出。

? ? 1.Vue的生命周期

<template><h2>當前求和為{{ sum }}</h2><button @click="add">點為sum+1</button>
</template>
<script setup name="Person" lang="ts">import { ref,onBeforeMount,onMounted, onUpdated,onBeforeUpdate,onBeforeUnmount,onUnmounted} from 'vue';let sum =ref(0)const add=()=>{sum.value+=1}//創建console.log('組件創建');//掛載onBeforeMount(()=>{console.log('租借掛載之前');})//掛載完畢onMounted(()=>{console.log('person掛載完畢');})//更新前onBeforeUpdate(()=>{console.log('更新前');})//更新完畢onUpdated(()=>{console.log(' 更新后', )})//卸載前onBeforeUnmount(()=>{console.log(' 卸載前', )})//卸載后onUnmounted(()=>{console.log(' 卸載后', )})
</script>
<!-- scoped局部樣式 類似于module.css -->
<style scoped>
</style>

? ? ? ? 這些就是vue3的生命周期常用的掛載前掛載后以及更新后。

2.watchEffect

? ? ? ? watch監聽方法可以監聽多個需要用[{}]這樣寫法,而且如果對象的屬性需要函數式也就是()=>person.car這種。

? ? ? ? watchEffect可以自己分析監聽數據,只要里面的數據發生改變就會重新執行函數而且上來就會執行一次。

<template><h1>水位達到60度或者水位達到80cm 服務器發送請求</h1><h2>當前水溫為{{ temp }}</h2><h2>當前水位{{  height}}</h2><button @click="changetemp">水溫加10</button><button @click="changeheight">水位加10</button>
</template>
<script setup name="Person" lang="ts">import { ref,watch,watchEffect } from 'vue';let temp =ref(10)let height=ref(0)const changetemp=()=>{temp.value+=10}const changeheight=()=>{height.value+=10}//監視//watch必須指定監視誰// watch([temp,height],(value)=>{//     let [newtemp,newheight] = value//     if(newtemp>=60||newheight>=80){//         console.log('發送請求');//     }// })//watchEffect可以直接用回自己分析監視誰?// 響應式的追蹤其依賴 并且依賴更改之后重新執行函數//上來就會執行一次watchEffect(()=>{if(temp.value>=60||height.value>=80){console.log('發送請求');        }})  
</script>
<style>
</style>

3.hooks和props傳遞

? ? ? ? hooks當我們操作的方法和數據很多組件要使用或者很明顯重復代碼過多,那么就可以提取到一個ts文件也就是包裹一個匿名函數里面,文件名use開頭。

????????

? ? ? ? 組件之間的props傳遞也是和react一樣,只不過需要用defineProps()傳遞如果沒有指定類型那么就需要指定接收的屬性名,如果指名了接收的數據類型就可以參數可以為().? ?

<template><ul><li v-for="item in x.personlist" :key="item.id">{{ item.name }}--{{ item.age }}</li></ul><h2>{{ x.a }}</h2>
</template>
<script setup name="Person" lang="ts">import { ref,watch,watchEffect,defineExpose,defineProps,withDefaults} from 'vue';import type { Person } from '@/types';//接收數組并且保存到x變量上//let x = defineProps(['personlist'])//可以聲明類型 這里傳什么接收什么//let x = defineProps<{personlist:Person[],a:number}>()//可以設置默認值let x =withDefaults(defineProps<{personlist?:Person[],a:number}>(),{personlist:()=>[{id:'a',name:'s',age:1}],a:2})
</script>
<!-- scoped局部樣式 類似于module.css -->
<style scoped>
</style>

4.路由組件的參數傳遞

? ? ? ? vue3的路由組件定義以及跳轉連接link和react幾乎一致,

//創建一個路由器并且暴露出去
import { createRouter,createWebHistory } from "vue-router";
//創建路由器
import Home from "@/components/Home.vue";
import News from "@/components/News.vue";
import About from "@/components/About.vue";
import Detail from "@/components/Detail.vue";
const router = createRouter({history:createWebHistory(),routes:[//一個個路由規則{path:'/home',component:Home},{path:'/about',component:About},{path:'/news',component:News,children:[{name:'xiang',path:'detail',component:Detail,//第一種寫法//props:true//將所有params參數作為props傳遞給組件//第二種寫法 可以指定queryprops(route){return  route.query}}]}]
})
/*history兩種模式url更加美觀 接近傳統完整的url 不加#vue3 createWebhistrry() React缺點 上線需要服務端配合 否則刷新會404<createBrowserRouter></createBrowserRouter><Router Provider></Router>hash模式url帶有# SEO優化方面相對較差createWebHashhsitory
*/ 
//暴露操作
export default router

? ? ? ? 也是兩種路由表模式一種是createWebhistory另一種是hash模式多了個#和react的createBrowserRouter以及createHashrouter差不多,然后嵌套路由也是直接children直接寫。

????????子路由展示區域需要用RouterView,React用outlet組件。RouterLinkl跳轉路徑組件,然后就是傳遞參數,父路由組件路由像子路由組件傳遞參數。比較繁瑣而且在寫項目的時候沒有使用過,只是前端像后端發送請求會攜帶參數,比如/:id不過一般都是在get('',{id;})這樣攜帶,params參數。

<template><h1>我是news</h1><ul><li v-for="item in newslist" :key="item.id"><!-- 第一種寫法 query傳遞參數 --><RouterLink :to="/news/detail?id=${item.id}&title=${item.title}">{{ item.title }}--{{ item.content }}</RouterLink><!-- 第二種寫法query --><!-- <RouterLink :to="{path:'/news/detail',query:{id:item.id,title:item.title}}">{{ item.title }}--{{ item.content }}</RouterLink> --><!-- params傳遞 第一種寫法 params傳遞需要占位--><!-- <RouterLink :to="/news/detail/${item.id}/${item.title}">{{ item.title }}--{{ item.content }}</RouterLink>  --><!-- 需要在定義路由的時候接收/:id/:title --><!-- 第二種寫法 如果使用to的對象寫法必須使用name配置項不能用path 需要用name 不能傳數組--><!-- <RouterLink :to="{name:'xiang',params:{id:item.id,title:item.title}}">{{ item.title }}--{{ item.content }}</RouterLink>  --><!-- 路由規則props配置 props:true --></li></ul><div><RouterView></RouterView></div></template><script setup name="News" lang="ts">import { reactive } from 'vue';import { RouterView, RouterLink} from 'vue-router';const newslist=reactive([{id:1,title:'十種食物',content:'系懶覺'},{id:2,title:'十種測試',content:'系懶覺'},{id:3,title:'好消息',content:'震驚'},{id:4,title:'壞消息',content:'周一'}])
</script>
<style>
</style>

? ? ? ? 兩種一種是query一種是params,寫法是固定的,不用記憶。接收的話用useRoute鉤子

<template><ul><!-- <li>{{ query.id }}</li><li>{{ query.title }}</li> --><li>{{ x.id }}</li><li>{{ x.title }}</li></ul>
</template><script setup name="Detail" lang="ts">import { reactive, toRefs ,defineProps} from 'vue';//從響應式對象結構屬性需要加toRefs包裹不然丟失響應功能import { RouterView, useRoute} from 'vue-router';//獲取父路由組件通過路徑傳遞query的參數// let data = useRoute()// let {query}=toRefs(data)//獲取params參數// let data = useRoute()// let {params}=toRefs(data)let x = defineProps(['id','title'])console.log(x);</script>
<style>
</style>

? ? ? ? 如果在定義路由組件規則的時候聲明props:true那么可以用接收props的方式接收params參數,如果props(route){return route.query}可以用接收props方式接收query參數。

????????

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

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

相關文章

探索Thompson Shell:Unix初代Shell的智慧

引言 在計算機科學的漫漫長河中&#xff0c;Thompson Shell 無疑占據著舉足輕重的開創性地位&#xff0c;它是 Unix 系統的第一個 shell&#xff0c;誕生于 1971 年&#xff0c;由計算機領域的傳奇人物 Ken Thompson 開發。在那個計算機技術剛剛起步、硬件資源極度匱乏的年代&a…

MySQL B+ 樹索引詳解:從原理到實戰優化

引言在現代數據庫應用中&#xff0c;查詢效率是影響系統性能的關鍵因素之一。而索引&#xff0c;尤其是 B 樹索引&#xff0c;是 MySQL 中最常用、最重要的性能優化手段。正確使用索引可以將查詢時間從毫秒級降低到微秒級&#xff0c;極大地提升應用響應速度。1. B 樹索引的重要…

計算機內存中的整型存儲奧秘、大小端字節序及其判斷方法

目錄 一、回顧與引入&#xff1a;整數在內存中的存儲方式 為什么要采用補碼存儲&#xff1f; 二、大小端字節序及其判斷方法 1、什么是大小端&#xff1f; 2、為什么存在大小端&#xff1f; 3、練習 練習1&#xff1a;簡述大小端概念并設計判斷程序&#xff08;百度面試…

Redis 最常用的 5 種數據類型

Redis 支持多種靈活的數據類型&#xff0c;每種類型針對特定場景優化。以下是 **Redis 最常用的 5 種數據類型**及其核心特點和應用場景&#xff1a;1. 字符串&#xff08;String&#xff09;描述&#xff1a;最基本的數據類型&#xff0c;可存儲文本、數字&#xff08;整數/浮…

【嵌入式】RK3588 對比 NVIDIA Jetson,Radxa Rock 5B vs Orange Pi 5 Max

RK3588這個芯片,適合AI應用么,為什么這么貴呢 AI 邊緣盒子里的旗艦芯 深度分析一下 RK3588(瑞芯微 Rockchip RK3588) 為什么被很多人關注在 AI 應用,以及它價格偏高的原因。 ?? 1. RK3588 的基本情況 制程:8nm(Samsung 8nm LP) CPU:8 核 big.LITTLE 架構(4 Cortex-…

暴雨讓高性能計算更“冷靜”

當AI大模型的參數突破萬億&#xff0c;當深地探測的精度邁向微米&#xff0c;當數字經濟的脈搏與千行百業深度共振&#xff0c;算力已成為驅動時代向前的核心引擎。然而&#xff0c;傳統風冷技術在高密度算力需求面前漸顯乏力——機柜內的熱浪如同無形的枷鎖&#xff0c;既制約…

SpringAI集成MCP

文章目錄1_調用公用MCP2_Stdio方式3_Stdio實現原理4_SSE方式5_自定義MCP客戶端6_MCP Server權限控制SpringAI 通過 SpringBoot 集成擴展了 MCP Java SDK &#xff0c;提供了客戶端和服務端 starter&#xff0c;讓 AI 應用程序快速支持 MCP。接下來直接演示。 1_調用公用MCP 在…

Spring Start Here 讀書筆記:第10章 Implementing REST services

REST 服務可用于實現兩個應用之間的通訊&#xff0c;包括 Web 應用中的客戶端和服務器之間&#xff0c;移動應用與后端服務之間&#xff0c;或兩個后端服務之間。 10.1 使用 REST 服務在應用之間交換數據 REST端點是應用程序通過 Web 協議公開服務的方式&#xff0c;因此也稱…

SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在郵件/短信發送功能上的全面橫向對比報告

以下是對SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在郵件/短信發送功能上的全面橫向對比報告&#xff08;截至2025年8月最新版本&#xff09;&#xff0c;涵蓋技術實現、配置復雜度、適用場景及權威評測&#xff1a;??一、郵件發送能力對比????1. Orac…

服務器與客戶端

目錄 一、服務器&#xff08;Server&#xff09; 核心特點 常見類型 二、客戶端&#xff08;Client&#xff09; 核心特點 常見類型 客戶端與服務器的交互流程 補充&#xff1a;與 “對等網絡&#xff08;P2P&#xff09;” 的區別 C/S模式 一、C/S 模式的核心原理 …

GaussDB 并發自治事務數達到最大值處理案例

1 業務背景自治事務&#xff08;Autonomous Transactions&#xff09;是一種高級特性&#xff0c;允許你在一個事務中執行另一個獨立的事務。這種機制特別有用&#xff0c;尤其是在需要在一個事務中執行多個操作但又不想因為其中一個操作失敗而影響整個事務的場景。2 業務影響在…

【傳奇開心果系列】Flet分頁自定義組件CustomPaginationComponent封裝版自定義模板

Flet分頁自定義組件CustomPaginationComponent封裝版自定義模板一、效果展示GIF動圖二、應用場景三、特色說明四、源碼下載地址一、效果展示GIF動圖 二、應用場景 圖片瀏覽應用&#xff1a; 用戶可以通過分頁組件瀏覽多張圖片&#xff0c;每點擊一次“上一頁”或“下一頁”按鈕…

數據安全——39頁解讀數字化轉型大數據安全基礎培訓方案【附全文閱讀】

適應人群為企業數據安全管理人員、IT 運維人員、數字化轉型決策者、網絡安全工程師及關注大數據安全的從業人員。主要內容圍繞數字化轉型中大數據安全展開,核心包括基礎概念(信息、數據與大數據的定義及區別,大數據 4V 特點與來源);安全風險(企業面臨的數據資產管理缺失、…

week3-[二維數組]小方塊

week3-[二維數組]小方塊 題目描述 如果四個數 a,b,c,da,b,c,da,b,c,d 可以分成兩組&#xff0c;每組兩個數&#xff0c;滿足每組里面的兩個數一樣&#xff0c;那么稱這四個數是好的。 比如&#xff0c;2,5,2,52,5,2,52,5,2,5 是好的&#xff0c;因它滿足兩組&#xff1a;222 與…

Swift 項目結構詳解:構建可維護的大型應用

Swift 項目結構詳解&#xff1a;構建可維護的大型應用一、基礎結構&#xff08;推薦新手使用&#xff09;二、組件化結構&#xff08;企業級應用推薦&#xff09;層級架構&#xff1a;MVVM Coordinator路由實現&#xff08;Coordinator模式&#xff09;三、通用組件實現DI&…

【實時Linux實戰系列】基于實時Linux的數字轉換器設計

在現代電子系統中&#xff0c;數字轉換器&#xff08;如模數轉換器ADC和數模轉換器DAC&#xff09;扮演著至關重要的角色。它們負責將模擬信號轉換為數字信號&#xff0c;或將數字信號轉換為模擬信號&#xff0c;從而實現信號的數字化處理和傳輸。在實時系統中&#xff0c;如工…

FastTracker:實時準確的視覺跟蹤

摘要 https://arxiv.org/pdf/2508.14370 傳統的多目標跟蹤(MOT)系統主要設計用于行人跟蹤&#xff0c;通常對其他物體類別的泛化能力有限。本文提出了一種能夠處理多種物體類型的通用跟蹤框架&#xff0c;特別強調在復雜交通場景中的車輛跟蹤。所提出的1方法包含兩個關鍵組件&a…

國產輕量級桌面GIS軟件Snaplayers從入門到精通(20)

國產輕量級桌面GIS軟件Snaplayers實操&#xff1a;打開圖層并顯示屬性信息1、根據數據格式選擇圖層文件2、加載圖層到地圖中&#xff0c;并在左側顯示圖層的屬性表格3、屬性表格分頁顯示Snaplayers研發團隊承諾&#xff1a;國產輕量級桌面GIS軟件Snaplayers永久免費并持續更新

快速入門flask應用(從入門到實戰)

目錄 前言&#xff1a; 了解一些網絡通信的概念 什么是網絡通信&#xff1a; 當我們訪問一個網址的時候發生了什么&#xff1a; 1. 解析 URL&#xff1a;明確訪問目標 2. DNS 域名解析&#xff1a;將 “名字” 轉為 “地址” 3. 建立連接&#xff1a;TCP 三次握手&#x…

C++/QT 開發技能樹詳解

一、 編程語言 (C)1. C基礎語法&#xff08;數據類型、模板、命名空間&#xff09;是什么&#xff1a; 這是構建C程序的基石。數據類型定義了變量存儲的數據種類和大小&#xff1b;模板允許編寫與數據類型無關的通用代碼&#xff1b;命名空間用于避免大型項目中的名稱沖突。如何…