學習vue3階段性復習(插槽,Pinia,生命周期)

目錄

插槽(匿名插槽,具名插槽)

插槽概述

匿名插槽

具名插槽

Pinia(統一管理,共享數據)

pinia概述

安裝和使用Pinia

1 使用命令下載Pinia?

2 再main.js中導入,注冊到vue框架中

3使用pinia

持久化存儲插件

1 第一步:下載插件

2 第二步:在main.js文件中導入插件,并注冊,如圖所示

第三步:在stores文件夾下的counter.js文件中設置持久化存儲的store設置參數為true就可以實現持久化了。

生命周期


插槽(匿名插槽,具名插槽)

插槽概述

什么是插槽,它有什么用?當我們想把父組件中的某些片段插入到子組件的指定位置時就可以使用插槽來實現。

舉例:

有一個頭部的組件整體顏色和log布局都設計好了,但是碰到一個奇葩用戶,就是想在頭部的某個位置加上他想對女朋友說的話,難道我們要放棄已經做好的頭部組件,重新給他單獨做個嗎?能不能在使用現成的頭部組件的情況下,滿足客戶的個性化需求呢?這個時候就可以使用插槽,頭部組件還是照常使用,只不過把客戶個性化需求內容寫在父組件中,然后再子組件中引用生效,不影響其它使用該子組件的地方。

插槽分為匿名插槽和具名插槽。匿名插槽一般應用于簡單的通用情況,具名插槽一般用于稍復雜場景。


匿名插槽

  • 案例1(爺傳父,爺傳父,父傳孫)

App.vue

<script setup>
import father from './views/father.vue';
import { provide, inject,ref,reactive} from 'vue';
</script><template>
<father><h2>爺爺</h2>
</father>
<br/>
</template><style scoped></style>

father.vue

<template><Son><slot></slot></Son><hr/>父親:  <slot></slot>
</template><script setup>
import { inject,ref } from 'vue';
import Son from '../views/son.vue'
</script><style lang="scss" scoped></style>

son.vue

<template> ?孫子: <slot></slot>
</template>?
<script setup>
import { inject ,provide,ref} from 'vue';
</script>?
<style lang="scss" scoped>?</style>

測試結果


具名插槽

由于匿名插槽,缺點:我使用slot標簽就可以使用 App.vue 攜帶的代碼片段、數據,但不具備唯一性,如果我只希望在某一個組件中使用,就可以使用具名插槽。

App.vue

<template><!-- <div>爺爺傳給孫子的基本數據:{{ parent }}<br>爺爺傳給孫子的對象數據:{{ parent2 }}</div> --><!-- <button @click="count">爺爺傳遞的函數</button> -->孫子: <slot></slot><hr/>爺爺傳給孫子的基本數據值:<slot name="data"></slot>
</template><script setup>
import { inject ,provide,ref} from 'vue';
</script><style lang="scss" scoped></style>

father.vue

<template><Son><slot></slot><slot name="data"></slot></Son><!-- <div>
爺爺傳給父親的基本數據值:{{ father }}<br/>爺爺傳給父親的對象值:{{ father1 }}</div> --><hr/>父親:  <slot></slot><hr/>爺爺傳給父親的基本數據值:<slot name="data"></slot>
</template><script setup>
import { inject,ref } from 'vue';
import Son from '../views/son.vue'
</script><style lang="scss" scoped></style>

son.vue

<script setup>
import father from './views/father.vue';
import { provide, inject,ref,reactive} from 'vue';
const data=ref(1234567890)
</script><template>
<father><h2>爺爺</h2><template v-slot:data>帆帆帆帆帆帆帆帆帆帆</template>
</father>
<br/>
</template><style scoped></style>

測試結果

總結:插槽只能嵌套傳遞,無法跨組件傳遞


Pinia(統一管理,共享數據)

pinia概述

pinia 可以理解為vue框架中的存儲倉庫,存儲組件中需要的數據。

例如在之前的案例中,無論是父子組件數據的傳遞還是跨組件傳數據,一旦組件的數量超出了一定的范圍,它們傳遞的數據就會很大程度上會搞錯,甚至分不清哪一個數據是哪一個組件傳遞過來的或者傳給哪一個組件。

基于上面的問題,使用pinia 統一管理那些組件的傳遞的數據,當需要時,再從pinia 配置文件中獲取


安裝和使用Pinia

步驟

1 使用命令下載Pinia?

安裝命令:npm ?install ?pinia


2 再main.js中導入,注冊到vue框架中

通過上述操作,我們的項目就可以使用pinia了。

3使用pinia

上面介紹的時候說了pinia是一個庫,那么具體**幫我們管理組件之間數據和狀態的家伙是誰呢,一般管它叫store**,接下來我們就來具體應用它。

在項目的src目錄下新建一個stores的目錄,然后再stores目錄下新建一個js文件當做我們存儲數據的倉庫,課程案例中取名用的是counter.js,然后在counter.js文件中定義store數據并導出,返回。實操如圖所示:

counter.js文件

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'export const useStore = defineStore('counter',() => {const count = ref(0)const doubleCount = computed(() => count.value * 2)function increment() {count.value++}return { count, doubleCount, increment }
})

我們已經完成了對存儲數據的配置文件 counter.js的構建,現在就可以正式開始使用配置文件的數據

App.vue

<script setup>
import { useStore } from './stores/counter.js'
const store =useStore()</script><template><button @click="store.increment">count: {{ store.count }}</button><hr/><button @click="store.increment">使用雙倍的count:: {{ store.doubleCount }}</button></template><style scoped></style>

測試結果

store.doubleCount 函數 使用了computed 計算屬性, 只有當count數據發生變化時,才使用到computed函數。

如果count數據不發生改變,則不會使用到computed 函數。這樣做有利于節省資源,避免多次無效調用

小結:先把一些需要用到的共享數據或函數給定義在一個js文件中,然后把該文件文件export出去。在使用的地方先導入,然后創建一個操作對象,通過操作對象進行操作即可。


持久化存儲插件

基于上面的案例,我們發現,如果當刷新瀏覽器,數據又返回到最開始的值,數據發生了改變。

我現在希望將數據存儲在瀏覽器的本地存儲當中,這樣可以實現對數據的永久存儲

操作步驟

1 第一步:下載插件

安裝插件命令 npm i pinia-plugin-persistedstate

2 第二步:在main.js文件中導入插件,并注冊,如圖所示

第三步:在stores文件夾下的counter.js文件中設置持久化存儲的store設置參數為true就可以實現持久化了。

測試結果:重新運行上面的案例

生命周期

生命周期這里指的是組件涉及的生命周期函數。組件實例從創建到銷毀過程中不同時間點自動調用的函數被稱為生命周期函數。

組件的什么周期大體可以? 分為掛載階段-更新階段-卸載階段-錯誤處理四個階段。

組件掛載之前還有模板編譯和渲染兩個步驟。模板編譯是值把 組件模板轉為js代碼;渲染指的是把生成的js代碼渲染到頁面,生成虛擬DOM;掛載指的是把虛擬DOM掛載到真實的DOM樹上,使其在頁面顯示出來。

在這里我們重點關注兩個函數

onMounted函數:掛載到瀏覽器后

onupdated函數 ? 瀏覽器數據的更新后

注意:這兩個函數當達到生命周期的某一個階段后,會自動調用

<script setup>
import { ref, onMounted, onUpdated } from 'vue'
//生命周期
const count = ref(0);
onMounted(()=>{console.log('mounted',count.value+10) 
})
onUpdated(()=>{console.log('updated')
})
</script><template><button @click="count++">{{ count }}</button>
</template><style scoped></style>

測試結果

觀察控制臺:

總結:當第一次運行后,掛載到瀏覽器,之后即使數據發生變化,也不再重新掛載,

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

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

相關文章

嵌入式Linux 期末復習指南(上)

鑒于互聯網上針對本科目相關復習視頻及資料過少&#xff0c; 撰寫本篇期末復習指南用作期末復習知識點掃盲&#xff0c;以應對本科期末考試及格之用。 由于任課老師并透露考試范圍或任何有關試卷的相關信息&#xff0c;本篇指南基于教材、上機實驗報告及作者經驗編寫&#xff0…

VScode ios 模擬器安裝cocoapods

使用 Homebrew 安裝&#xff08;推薦&#xff09; 如果你有 Homebrew&#xff0c;直接用它安裝更穩定&#xff1a; brew install cocoapods

Python趣學篇:用Pygame打造絢爛流星雨動畫

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 專欄介紹&#xff1a;《Python星球日記》 目錄 一、項目簡介與效果展示二、技術棧與核…

可視化大屏通用模板Axure原型設計案例

本文將介紹一款基于Axure設計的可視化大屏通用模板&#xff0c;適用于城市、網絡安全、園區、交通、社區、工業、醫療、能源等多個領域。 模板概述 這款Axure可視化大屏通用模板集成了多種數據展示模塊和組件&#xff0c;旨在為用戶提供一個靈活、可定制的數據展示平臺。無論…

20250530-C#知識:萬物之父Object

C#知識&#xff1a;萬物之父Object Object類&#xff08;即object&#xff09;是所有類的基類&#xff0c;這里面的方法還是需要好好了解一下。 1、Object類 是頂級父類&#xff0c;其他類默認都是Object類的子類&#xff08;自定義類也會默認繼承Object類&#xff09;可以用O…

蘋果應用開發詳細教程(2025最新版)

蘋果應用開發詳細教程(2025最新版) 第一階段:開發環境搭建 硬件準備 Mac電腦(macOS Monterey 12或更高版本)iPhone/iPad(真機調試建議iOS 16+)軟件安裝 # 通過App Store安裝Xcode xcode-select --installXcode 15+(包含Swift 5.9編譯器)安裝CocoaPods(依賴管理工具)…

flutter項目遷移空安全

重中之重 備份好項目文件&#xff0c;甚至連已經加載好的flutter庫也可以備份。環境包升級 2.1 不要直接換成flutter:3.0以上的版本&#xff0c;這樣做既有基本的庫兼容問題&#xff0c;又有空安全下的語法問題(整個項目中需要增加 late、?、!的語法錯誤&#xff0c;一片報錯的…

架構師面試題整理

以下是從提供的HTML代碼中提取的所有class"title-txt"的文本內容&#xff0c;已排除重復項并按順序整理&#xff1a; 緩存專題 實戰解決大規模緩存擊穿導致線上數據庫壓力暴增面試常問的緩存穿透是怎么回事基于DCL機制解決突發性熱點緩存并發重建問題實戰Redis分布…

pytest 中 fixture 與類繼承交互導致的問題

文章目錄 問題分析將屬性綁定到 **類** 上使用 scopefunction 解決方法為什么有兩個不同的對象核心原因&#xff1a;fixture 的執行上下文scopefunction 的情況scopeclass 的情況 為什么 pytest 要這樣做&#xff1f;這是 pytest 的設計局限 總結 本文探討 Pytest 中 fixture 作…

uniapp+ts模擬popup彈出框(下拉框)

效果圖&#xff08;未展開的樣子&#xff09;&#xff1a; 效果圖&#xff08;展開的樣子&#xff09;&#xff1a; 子組件代碼&#xff1a; <!--* Date: 2024-04-26 14:30:00* LastEditTime: 2025-05-29 09:01:06* Description: 技術服務 --> <template><view …

中小型企業大數據平臺全棧搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆級配置指南

目錄 背景?一、環境規劃與依賴準備?1. 服務器規劃(3節點集群)2. 系統與依賴?3. Hadoop生態組件版本與下載路徑4. 架構圖二、Hadoop(HDFS+YARN)安裝與配置?1. 下載與解壓(所有節點)2. HDFS高可用配置3. YARN資源配置?4. 啟動Hadoop集群三、MySQL安裝與Hive元數據配置…

谷粒商城-分布式微服務項目-高級篇[三]

十五、商城業務-支付 15.1 支付寶支付 15.1.1 進入“螞蟻金服開放平臺” 支付寶開放 平臺地址&#xff1a; 支付寶開放平臺 15.1.2 下載支付寶官方 demo&#xff0c;進行配置和測試 開發者文檔&#xff1a;支付寶開放平臺文檔中心 電腦網站支付文檔&#xff1a;小程序文…

DeepSeek 賦能低空經濟:無人機智能調度的破局之道

目錄 一、引言二、DeepSeek 技術探秘2.1 DeepSeek 技術核心要點2.2 與傳統技術對比優勢 三、低空經濟無人機調度挑戰剖析3.1 飛行控制困境3.2 數據處理難題3.3 系統集成阻礙 四、DeepSeek 應用方案與成果4.1 智能調度與路徑規劃4.2 自主飛行與協同控制4.3 通信與數據鏈優化4.4 …

【Kubernetes】ubuntu20.04通過kubeadm + Docker安裝k8s

Kubernetes v1.24集群安裝配置步驟總結 一、環境準備 &#xff08;一&#xff09;系統要求 運行兼容deb/rpm的Linux操作系統&#xff08;如Ubuntu或CentOS&#xff09;的計算機&#xff0c;1臺或多臺。每臺機器內存2GB以上&#xff0c;內存不足會限制應用運行。控制平面節點…

計算機視覺NeRF

NeRF與3DGS學習 NeRF計算機視覺的問題NeRF定義神經輻射場場景表示基于輻射場的體渲染分層采樣優化神經輻射場 基礎知識初始化SFM基礎矩陣 & 本質矩陣 & 單應矩陣從已經估得的本質矩陣E&#xff0c;恢復出相機的運動R,tSVD 分解 NeRF NeRF資源 計算機視覺的問題 計算…

工業手持PDA終端,有哪些作用?

工業手持PDA終端&#xff08;便攜式數據采集終端&#xff09;&#xff0c;是專為工業場景設計的智能化工具&#xff0c;擁有強大的數據采集和處理能力。通過內置的條碼掃描功能&#xff0c;PDA能夠快速準確地獲取信息&#xff0c;避免了人工錄入可能出現的錯誤&#xff0c;大大…

Spark-TTS: AI語音合成的“變聲大師“

嘿&#xff0c;各位AI愛好者&#xff01;還記得那些機器人般毫無感情的合成語音嗎&#xff1f;或者那些只能完全模仿但無法創造的語音克隆&#xff1f;今天我要介紹的Spark-TTS模型&#xff0c;可能會讓這些問題成為歷史。想象一下&#xff0c;你可以讓AI不僅說出任何文字&…

C++鏈式調用與Builder模式

在C++中實現鏈式調用(如 a.b().c().d())的關鍵是讓每個成員函數返回對象的引用(通常是 *this),從而允許連續調用其他成員函數。這種模式常見于方法鏈(Method Chaining)或流式接口(Fluent Interface)。下面是實現鏈式調用的具體方法和示例: 實現原理 返回對象引用:每…

SQL的查詢優化

1. 查詢優化器 1.1. SQL語句執行需要經歷的環節 解析階段&#xff1a;語法分析和語義檢查&#xff0c;確保語句正確&#xff1b;優化階段&#xff1a;通過優化器生成查詢計劃&#xff1b;執行階段&#xff1a;由執行器根據查詢計劃實際執行操作。 1.2. 查詢優化器 查詢優化器…

結構型設計模式之橋接模式

文章目錄 1. 橋接模式概述2. 模式結構3. 橋接模式的優缺點優點缺點 4. 橋接模式的應用場景5. C#代碼示例5.1 簡單示例 - 形狀與顏色5.2 更復雜的示例 - 跨平臺消息發送系統 6. 橋接模式與其他模式的比較7. 真實世界中的橋接模式應用7.1 數據庫驅動7.2 UI框架中的渲染機制 8. 橋…