学习vue3阶段性复习(插槽,Pinia,生命周期)

article/2025/7/21 16:54:36

目录

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

插槽概述

匿名插槽

具名插槽

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.hkcw.cn/article/fKjNfGRauy.shtml

相关文章

创建环境 镜像报错UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel...

报错&#xff1a;Platform: win-64 Collecting package metadata (repodata.json): failed UnavailableInvalidChannel: HTTP 404 NOT FOUND for channel anaconda/pkgs/main <https://mirrors.aliyun.com/anaconda/pkgs/main> The channel is not accessible or is inva…

小狼毫输入法雾凇拼音输入方案辅码由默认的部件拆字/拼音输入方案修改为五笔画方案

搜狗拼音输入法不单单是弹出广告的问题&#xff0c;还有收集输入习惯等隐私的嫌疑。所以最近彻底删除了这个输入法&#xff0c;改安装了小狼毫输入法。关于小狼毫输入法的安装和使用网上已经有了无数文章&#xff0c;我这里就不重复了。在试用多个拼音方案后&#xff0c;最终我…

车载通信网络 --- OSI模型中传输层、会话层、表示层和应用层

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Dify理论+部署+实战

概述 一个功能强大的开源AI应用开发平台&#xff0c;融合后端即服务&#xff08;Backend as Service&#xff09;和LLMOps理念&#xff0c;使开发者能够快速搭建生产级的生成式AI应用。 核心优势 直观的用户界面&#xff1a;提供简洁明了的操作界面&#xff0c;使得用户能够…

Java类和对象详解

文章目录 1.初步认识2.类的定义与实例化2.1 类的定义2.2 类的实例化与使用 3.this关键字4.对象的构造和初始化4.1 默认初始化4.2 就地初始化4.3 构造方法初始化 5.对象的打印6.包的理解6.1 导入包中的类6.2 自定义包6.3 包访问权限 7.封装7.1 访问限定符详解 8.static关键字8.1…

【Go语言】Fyne GUI 库使用指南 (面向有经验开发者)

引言 Fyne 是一个使用 Go 语言编写的、易于使用的跨平台 GUI 工具包和应用程序 API。它旨在通过单一代码库构建在桌面和移动设备上运行的应用程序。本文档面向有一定 Go 语言开发经验的开发者&#xff0c;将详细介绍 Fyne 最新版的核心功能&#xff0c;包括基础组件、布局系统…

1. pytorch手写数字预测

1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪&#xff0c;突然对其他的视觉方向产生了兴趣&#xff0c;所以心血来潮的回到最经典的视觉任务手写数字预测上来&#xff0…

武警智能兵器室系统架构设计与关键技术解析

在现代化武警部队建设中&#xff0c;武器弹药的安全管理与快速响应能力直接影响部队战斗力。本文基于某实战化智能兵器室建设案例&#xff0c;深入解析其系统架构设计、关键技术实现及创新管理机制&#xff0c;为安防领域提供可借鉴的解决方案。 整体拓扑结构 系统采用分层分布…

HTML5 列表、表格与媒体元素、页面结构分析

1. 列表 无序列表 有序列表 定义列表 列表对比 2. 表格 跨列 跨行 跨行和跨列 3. HTML5的媒体元素 视频元素 注意&#xff1a;autoplay现在很多浏览器不支持了&#xff01; 音频元素 4. 页面结构分析 5. 总结

中文文本分析及词云生成

一、代码解析&#xff08;按执行顺序&#xff09; 1. 库导入 import jieba # 中文分词工具 from wordcloud import WordCloud # 词云生成器 from collections import Counter # 词频统计 import matplotlib.pyplot as plt # 可视化 import numpy as np # 图像矩阵处理 f…

芯片手册解读

一&#xff1a; 1.这是一款差分转单端的芯片&#xff1a; 2.给出了逻辑高低的识别门限&#xff1a;并不是大于100mv和小于-100mv就识别不到了——而是大于100mv和小于-100mv都可以识别到&#xff0c;手册的意思仅仅代表门限节点而已&#xff0c;完全可以在进入门限后的其他电…

LangChain-Tool和Agent结合智谱AI大模型应用实例2

1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…

专业级图片分割解决方案

在日常处理图片的过程中&#xff0c;我们常常会遇到需要将一张图分割成多个小图的情况。这一款高效又实用的图片分割工具——它操作简单、功能强大&#xff0c;关键是完全免费开源&#xff0c;适合所有有图像处理需求的朋友&#xff01; 在使用之前&#xff0c;先花几分钟把它…

Re--题

一&#xff0e;[NSSCTF 2022 Spring Recruit]easy C 直接看for循环&#xff0c;异或 写代码 就得到了flag easy_Re 二&#xff0e;[SWPUCTF 2021 新生赛]非常简单的逻辑题 先对这段代码进行分析 flag xxxxxxxxxxxxxxxxxxxxx s wesyvbniazxchjko1973652048$-&*&l…

iOS 集成网易云信IM

云信官方文档在这 看官方文档的时候&#xff0c;版本选择最新的V10。 1、CocoPods集成 pod NIMSDK_LITE 2、AppDelegate.m添加头文件 #import <NIMSDK/NIMSDK.h> 3、初始化 NIMSDKOption *mrnn_option [NIMSDKOption optionWithAppKey:"6f6568e354026d2d658a…

边缘计算网关支撑医院供暖系统高效运维的本地化计算与边缘决策

一、项目背景 医院作为人员密集的特殊场所&#xff0c;对供暖系统的稳定性和高效性有着极高的要求。其供暖换热站传统的人工现场监控方式存在诸多弊端&#xff0c;如人员值守成本高、数据记录不及时不准确、故障发现和处理滞后、能耗难以有效监测和控制等&#xff0c;难以满足…

Google Earth Pro 7.3 中文绿色版 - 谷歌地球专业版(精准定位,清晰查看您家位置)

谷歌卫星高清地图 下载链接&#xff1a;https://pan.quark.cn/s/c6069864c9f3 Google Earth Pro-7.3.6.9796-x64 Google Earth WinMac安装版 GoogleEarthProPortable googleearthpromac-intel-7.3.6.10155 GoogleEarthProWin-7.3.6.10155 GoogleEarthProWin-x64-7.3.6.10…

【工作笔记】 WSL开启报错

【工作笔记】 WSL开启报错 时间&#xff1a;2025年5月30日16:50:42 1.现象 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80370114 Error: 0x80370114 ??????????????????Press any key to continue...

《TCP/IP 详解 卷1:协议》第3章:链路层

以太网和IEEE802局域网/城域网标准 IEEE802局域网/城域网标准 IEEE 802 是一组由 IEEE&#xff08;电气与电子工程师协会&#xff09;定义的局域网和城域网通信标准系列&#xff0c;涵盖了从物理层到链路层的多个网络技术。其中&#xff1a; IEEE 802.3 定义的是传统的以太网…

【定昌linux开发板】设置密码的有效时间

查看密码策略命令 sudo chage -l 用户名 先查询下默认情况下&#xff0c;密码策略 结果&#xff1a; 可以看出&#xff0c;密码没什么策略 那么我要设置30天后过期&#xff0c;并且七天前要进行提醒 sudo chage -M 30 用户名 再进行查询&#xff0c;结果如下 显示密码的有…