学习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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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. 桥…