【vue3(七)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、ref
  • 二、TS接口泛型规范
    • 1.创建ts文件,定义接口
    • 2.引入规范
  • 三、props的使用
  • 四、生命周期(生命周期函数,生命周期钩子)
  • 五、自定义Hooks
    • 1.安装 axios并引入
    • 2.定义数组并写方法


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ref

ref可以放在html标签中,这时拿到的是DOM元素;也可以放在组件中使用,这时拿到的是组件实例对象
实现效果:
在这里插入图片描述
这里不推荐用id,因为若在App.vue里也出现了相同的id,便会先渲染,就会出现你好的字段,会有id冲突的问题
Person.vue

<template><div class="person"><h1>中国</h1><h2 id="title2">北京</h2><h3>开心</h3><button @click="showLog">点我输出h2这个元素</button></div>
</template><script lang="ts" setup name="Person">
function showLog(){console.log(document.getElementById('title2'))
}</script><style scoped>
.person{background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}</style>

App.vue

<template><h2 id="title2">你好</h2><Person/></template><script lang="ts" setup name="App">
import Person from "@/components/Person.vue";</script><style>
.app{background-color: #2c3e50;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}
</style>

修改后的Person.vue,使用ref即可解决id冲突问题

<template><div class="person"><h1>中国</h1><h2 ref="title2">北京</h2><h3>开心</h3><button @click="showLog">点我输出h2这个元素</button></div>
</template><script lang="ts" setup name="Person">
import {ref} from 'vue'// 创建一个title2,用于存储ref标记的内容
let title2 = ref()
function showLog(){console.log(title2))
}</script><style scoped>
.person{background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}</style>

以上ref是写在html里的,若把ref写在组件,返回的是组件实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
并未返回子组件定义的值,因为被保护起来的,只有子组件主动让访问,才可以

在这里插入图片描述
在这里插入图片描述

二、TS接口泛型规范

1.创建ts文件,定义接口

在src下新建types文件夹,新建index.ts,定义一个接口,用于限制对象的具体属性
在这里插入图片描述

2.引入规范

在这里插入图片描述
若定义多个人,放在一个数组,如何去限制。定义一个变量personList,personList是一个数组,数组的每一项要符合PersonInter接口规范,需要使用到泛型
在这里插入图片描述
还有另外一种修改方式
在这里插入图片描述
在这里插入图片描述

三、props的使用

实现父组件到子组件的值传递
在这里插入图片描述
从App.vue传的a 和list ,可以只接受list,若接收App.vue未传的内容,会显示undefined,也可用?来解决可传可不传
在这里插入图片描述
接受并限制类型
在这里插入图片描述
接受+限制类型+限制必要性+指定默认值
在这里插入图片描述
当App.vue没传,可设置默认值
在这里插入图片描述

四、生命周期(生命周期函数,生命周期钩子)

组件的一生:创建,挂载,更新,销毁
vue2的生命周期:创建组件,调用一个钩子(生命周期函数)
4个阶段,基础的8个钩子,不只有8个
创建(创建前 beforeCreate,创建完毕 created)----在内存中从无到有
挂载(挂载前 beforeMount,挂载完毕 mounted)—把.vue放在页面里,浏览器能看到
更新(更新前 beforeUpdate,更新完毕 updated)
销毁(销毁前 beforeDestory,销毁完毕 destroyed)
vue3的生命周期:
用set up 模拟,创建—console.log(‘创建’)
挂载——onBeforMount(()=>{console.log(‘挂载前’)})
——onMounted(()=>{ console.log(‘挂载完毕’)})
更新——onBeforeUpdate(()=>{console.log('更新前‘)})
——onUpdated(()=>{ console.log(‘更新完毕’)})
卸载——onBeforeUnmount(()=>{ console.log(‘卸载前’)})
——onUnmounted(()=>{ console.log(‘卸载前’)})
常用钩子:onMounted,onUpdate,onBeforeUnmount

问题:是父挂载完毕先输出,还是子挂载完毕先输出?
答:子先挂载完毕输出。入口文件在index.html,引入了main.ts,main.ts工作时发现要把App拿到页面,App.vue要解析这个组件,而App组件里有Person组件,把Person里所有执行完,App.vue组件开始才被解析完。App.vue是最后挂载的

五、自定义Hooks

Hooks可以实现模块化,即一个功能的数据和方法单独放在一个useXxx.ts文件。

想要实现数组里存放的图片,点击按钮便增加一张图
在这里插入图片描述

1.安装 axios并引入

控制台下载安装npm i axios
在person.vue里引入import axios from "axios";

2.定义数组并写方法

考虑若地址访问错误返回异常

<template><div class="person"><h2>当前求和为:{{sum}}</h2><button @click="showAdd">点我加一</button><hr><img  v-for="(dog,index) in dogList" :src="dog" :key="index"><br><button @click="getDog">再来一只</button></div>
</template><script lang="ts" setup name="Person">
import {ref,reactive} from 'vue'
import axios from "axios";// https://dog.ceo/api/breed/pembroke/images/randomlet sum = ref(0)
let dogList = reactive(['https://images.dog.ceo/breeds/pembroke/n02113023_4544.jpg',])function showAdd(){sum.value+=1
}async function getDog(){// axios.get('https://dog.ceo/api/breed/pembroke/images/random').then(//     response => {},//     error => {})try{let result = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')console.log(result.data)dogList.push(result.data.message)} catch (error){alert(error)}}</script><style scoped>
.person{background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}
button {margin: 0 5px;
}
li {font-size:20px;
}
img{height: 100px;margin-right: 10px;
}</style>

利用Hooks完成
src下新建hooks文件,把求和与增加图片单独创建,useSum.ts和useDog.ts。
useSum.ts

import {ref} from 'vue'export default function (){let sum = ref(0)function showAdd(){sum.value+=1}// 给外部提供东西return {sum,showAdd}}

useDog.ts

import {reactive} from 'vue'
import axios from "axios";// https://dog.ceo/api/breed/pembroke/images/randomexport default function (){let dogList = reactive(['https://images.dog.ceo/breeds/pembroke/n02113023_4544.jpg',])async function getDog(){// axios.get('https://dog.ceo/api/breed/pembroke/images/random').then(//     response => {},//     error => {})try{let result = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')console.log(result.data)dogList.push(result.data.message)} catch (error){alert(error)}}// 向外部提供东西return {dogList,getDog}
}

在person.vue里引入

<template><div class="person"><h2>当前求和为:{{sum}}</h2><button @click="showAdd">点我加一</button><hr><img  v-for="(dog,index) in dogList" :src="dog" :key="index"><br><button @click="getDog">再来一只</button></div>
</template><script lang="ts" setup name="Person">import useSum from '@/hooks/useSum'import useDog from "@/hooks/useDog";const {sum,showAdd} = useSum()const {dogList,getDog}=useDog()</script><style scoped>
.person{background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}
button {margin: 0 5px;
}
li {font-size:20px;
}
img{height: 100px;margin-right: 10px;
}</style>

也可以添加onMounted和computed属性
在这里插入图片描述
用计算属性实现扩大10倍,记得要交出去,方便在Person.vue使用
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/286112.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++翁恺

1、面向对象 Data&#xff1a;杯子的属性 Opera&#xff1a;杯子提供的服务 老师上课&#xff1a; C&#xff1a;按流程执行 C&#xff1a;定一个教室&#xff0c;有很多学生&#xff0c;投影仪&#xff0c;灯&#xff0c;每个学生反映不一样。 这个场景有什么东西&#xff0c…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

补充--广义表学习

第一章 逻辑结构 &#xff08;1&#xff09;A()&#xff0c;A是一个空表&#xff0c;长度为0&#xff0c;深度为1。 &#xff08;2&#xff09;B(d,e)&#xff0c;B的元素全是原子&#xff0c;d和e&#xff0c;长度为2&#xff0c;深度为1。 &#xff08;3&#xff09;C(b,(c,…

深度解析 – 广告印象(AD impression)

广告印象(AD impression)通过表示广告在给定网络或出版商的应用程序上的浏览次数来衡量广告的影响。广告商可以区分独特印象和非独特印象&#xff0c;以评估特定个人是否看到了他们的广告&#xff0c;并了解广告的播放频率。 所有的数字营销人员都知道这一点。但是&#xff0c…

【单例测试】Mockito实战

目录 一、项目介绍二、业务代码2.1 导入依赖2.2 entity2.3 Dao2.4 业务代码 三、单元测试3.1 生成Test方法3.2 引入测试类3. 3 测试前准备3.4 测试3.4.1 name和phone参数校验3.4.2 测试数据库访问 3.4.3 数据库反例 总结 前面我们提到了《【单元测试】一文读懂java单元测试》 简…

Python小案例:数字炸弹游戏(优化版)

优化内容 上次所写的 数字炸弹案例 中所留了的bug&#xff1a;   a. 两次死循环&#xff0c;其实可以只用一次的&#xff1b;☑   b. 如果其中一个人输入的数据是无效的后游戏将会重新开始&#xff0c;规则上来讲是直接淘汰该玩家 ☑ 本次利用列表坐标 name_Nub 叠加&#…

【Linux】线程预备知识{远程拷贝/重入函数与volatile关键字/认识SIGCHILD信号/普通信号/实时信号}

文章目录 0.远程拷贝1.重入函数与volatile关键字2.认识SIGCHILD信号3.普通信号/实时信号 0.远程拷贝 打包资源&#xff1a;tar czf code.tgz *远程传输&#xff1a;scp code.tgz usr服务器ip:/home/usr/路径解压&#xff1a;tar xzf code.tgz 1.重入函数与volatile关键字 先看…

LLM - 大语言模型的分布式训练 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136924304 大语言模型的分布式训练是一个复杂的过程&#xff0c;涉及到将大规模的计算任务分散到多个计算节点上。这样做的目的是为了处…

10-shell编程-辅助功能

一、字体颜色设置 第一种: \E[1:色号m需要变色的字符串\E[0m 第二种: \033[1:色号m需要变色的字符串\033[0m ########################### \E或者\033 #开启颜色功能 [1: #效果 31m #颜色色号 \E[0m #结束符 1&#xff0c;颜色案例 2&#xff0c;效果案例 二、gui&am…

C语言内存函数之 memcmp函数

memcmp函数的记忆&#xff1a;mem表示内存&#xff0c;单位是字节&#xff0c;表示以单位字节来进行操作&#xff1b;头文件是string.h&#xff0c;cmp是compare的缩写&#xff0c;表示比较。总的意思就是在规定的内存下以字节为单位一个字节一个字节的进行比较。 memcmp函数的…

CI/CD实战-jenkins部署 3

安装 软件下载地址&#xff1a;Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 启动服务 安装推荐插件 不新建用户&#xff0c;使用admin账号登录 修改一下初始密码 新建项目测试 安装git命令 生成密钥 在gitlab中上传公钥 修改ssh 创建中…

【双指针】Leetcode 202.快乐数

题目解析 Leetcode 202.快乐数 看完题目描述相信大家已经知晓题目的含义&#xff0c;我们通过一张图再剖析一下题目含义 快乐数或者非快乐数都是可以成环的&#xff0c;这个是数学上已经证明了的。所以这道题的最后含义就是分辨出环中全部是1或者全部没有1的 双指针 成环问…

【SpringBoot】如何定义接口

定义get接口 使用GetMapping定义一个基本get接口 RestController //表示定义一个json格式返回给前端 public class test {private Map<String,Object> map new HashMap<>();GetMapping(value "/test") //定义接口路径public Object userInfo(Strin…

【CVPR2024】PEM: Prototype-based Efficient MaskFormer for Image Segmentation

研究挑战&#xff1a;基于Transformer的架构在图像分割领域取得了显著的成果&#xff0c;但这些架构通常需要大量的计算资源&#xff0c;特别是在边缘设备上。 为了解决这个问题&#xff0c;作者提出了 PEM&#xff08;prototype-based efficient MaskFormer&#xff09;&…

在Linux/Debian/Ubuntu上通过 Azure Data Studio 管理 SQL Server 2019

Microsoft 提供 Azure Data Studio&#xff0c;这是一种可在 Linux、macOS 和 Windows 上运行的跨平台数据库工具。 它提供与 SSMS 类似的功能&#xff0c;包括查询、脚本编写和可视化数据。 要在 Ubuntu 上安装 Azure Data Studio&#xff0c;可以按照以下步骤操作&#xff1…

YZ系列工具之YZ09: VBA_Excel之读心术

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…

2024年3月26日 十二生肖 今日运势

小运播报&#xff1a;2024年3月26日&#xff0c;星期二&#xff0c;农历二月十七 &#xff08;甲辰年丁卯月己丑日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;鸡、鼠、猴 需要注意&#xff1a;马、狗、羊 喜神方位&#xff1a;东北方 财神方位&#xff1a;…

C语言----strcpy和strcat的使用和模拟实现

一&#xff0c;strcpy()函数 strcpy() 函数是 C语言中一个非常重要的字符串处理函数&#xff0c;其功能是将一个字符串复制到另一个字符串中。该函数原型如下&#xff1a; char*strcpy(char*dest,const char*src) 其中&#xff0c;dest 表示目标字符串&#xff0c;即将被复制到…

C语言动态内存的管理

前言 本篇博客就来探讨一下动态内存&#xff0c;说到内存&#xff0c;我们以前开辟空间大小都是固定的&#xff0c;不能调整这个空间大小&#xff0c;于是就有动态内存&#xff0c;可以让我们自己选择开辟多少空间&#xff0c;更加方便&#xff0c;让我们一起来看看动态内存的有…

使用html做一个2048小游戏

下载地址: https://pan.xunlei.com/s/VNtiF13HxmmE4gglflvS1BUhA1?pwdvjrt# 提取码&#xff1a;vjrt”