当前位置: 首页 > backend >正文

《vue3学习手记4》

vue3的生命周期

vue2生命周期 分为四个阶段,分别是创建,挂载,更新,销毁。包含八个钩子
vue3生命周期 分为四个阶段,分别是创建,挂载,更新,卸载。包含八个钩子
vue2和vue3钩子的名字有区别,且写法也有区别。

<template><div class="app"><h2>和为:{{sum}}</h2><button @click="add">点我sum+1</button></div>
</template><script lang="ts" setup name="Person">import {onBeforeMount, onBeforeUnmount, onBeforeUpdate, onMounted, onUnmounted, onUpdated, ref} from "vue"let sum=ref(0)function add(){sum.value++}
// ==========================================================================// 第一阶段:创建 setup  (脚本中就是setup函数,所以在vue3中创建阶段直接输出)console.log("创建了")
// 当打开页面控制台就输出“创建了”// ==========================================================================// 第二阶段:挂载 (挂载前:onBeforeMount; 挂载后:onMounted)onBeforeMount(()=>{console.log("挂载前")})onMounted(()=>{console.log("挂载完成")})
// 当打开页面控制台就输出“挂载前”和“挂载完成”// ==========================================================================// 第三阶段:更新 (更新前:onBeforeUpdate; 更新后:onUpdated)onBeforeUpdate(()=>{console.log("更新前")})onUpdated(()=>{console.log("更新完成")})
// 当点击按钮,sum值发生改变控制台就输出“更新前”和“更新完成”// ==========================================================================// 第四阶段:卸载 (卸载前:onBeforeUnmount; 卸载后:onUnmounted)onBeforeUnmount(()=>{console.log("卸载前")})onUnmounted(()=>{console.log("卸载完成")})
// 看App组件的条件渲染,当布尔值为false控制台就输出“卸载前”和“卸载完成”,此时组件被卸载
</script>

App.vue:

<template><!-- 这里使用 v-if而不使用v-show,是因为v-if会将不展示的组件销毁,便于演示;但v-show将不展示的组件用display:none进行隐藏--><Person v-if="isShow"/>
</template><script lang="ts" setup name="App">import Person from "./components/Person.vue"// 只需引入,不用注册组件,vue3引入之后会自动注册import {ref} from "vue"let isShow=ref(false)</script>

tips:
对子组件和父组件都进行挂载,则子组件先呈现,父组件再呈现,这和vue的解析流程有关

Hooks

先按照以前的方法写:

<template><div class="app"><h2>和为:{{sum}}</h2><button @click="add">点我sum+1</button><hr><img v-for="(image,index) in images" :key="index" :src="image" alt="小狗图片"><br><button @click="addImage">点击按钮获取一张图片</button></div>
</template><script lang="ts" setup name="Person">
// 要求:从提供的接口获取图片,点击按钮增加一个图片,并使其排成一行
import { ref,reactive } from 'vue';
import axios from "axios"let sum=ref(0)let images=reactive([])// 求和function add(){sum.value++}// 获取图片async function addImage(){try{   //使用try...catch捕获错误信息let result=await axios.get("https://dog.ceo/api/breed/pembroke/images/random")// console.log(result.data.message)images.push(result.data.message)} catch (error){alert(error)}}
</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}img {height: 150px;padding-left: 10px;}</style>

这样写并没有显现出vue3组合式开发的好处,一个组件处理的求和事件和获取图片的事件都写在一起,比较混乱
所以可以使用hooks,将所要处理的事件分开写就会很清晰,真正实现vue3组合式开发
使用hooks:
针对上述案例,在src下创建Hooks文件夹,文件夹下创建sumInfo.ts和dogInfo.ts
sumInfo.ts:

import { ref,reactive } from 'vue';
// 用函数包起来并暴露
export default function () {let sum=ref(0)// 求和function add(){sum.value++}// 把数据和方法等进行的操作交出去return {sum,add}
}

dogInfo.ts:

import { ref,reactive } from 'vue';
import axios from "axios"
// 用函数包起来并暴露
export default function () {let images=reactive([])// 获取图片async function addImage(){try{   //使用try...catch捕获错误信息let result=await axios.get("https://dog.ceo/api/breed/pembroke/images/random")// console.log(result.data.message)images.push(result.data.message)} catch (error){alert(error)}}// 把数据和方法等进行的操作交出去return {images,addImage}
}

person.vue:

<template><div class="app"><h2>和为:{{sum}}</h2><button @click="add">点我sum+1</button><hr><img v-for="(image,index) in images" :key="index" :src="image" alt="小狗图片"><br><button @click="addImage">点击按钮获取一张图片</button></div>
</template><script lang="ts" setup name="Person">
import sumInfo from "@/hooks/sumInfo"
import dogInfo from "@/hooks/dogInfo";
// 解构
const {sum,add}=sumInfo()
const {images,addImage}=dogInfo()
</script><style>.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius:10px;padding: 20px;}img {height: 150px;padding-left: 10px;}</style>

效果图:
在这里插入图片描述

路由的基本切换

路由的基本切换

1.和vue2基本相同
但vue3中需要进行引入
import {RouterView} from "vue-router"
import {RouterLink} from "vue-router"
2.路由组件一般放在pages或views文件夹下,一般组件放在components文件夹下。
3.切换掉的路由组件默认被卸载,再次切换回来时,再进行挂载。

路由的工作模式

vue2:mode:"history" /mode:"hash"
vue3:
HTML5模式:history:createWebHistory 相当于vue2中的history模式
hash模式:history: createWebHashHistory(), 相当于vue2中的hash模式
Memory模式: history: createMemoryHistory(),
hash模式带#号,兼容性更强,担当分享链接时,#可能会被标记为不合法。
history模式不带#号,页面美观,但可能刷新页面会出现404的问题。

http://www.xdnf.cn/news/62.html

相关文章:

  • openai发布今天发布了o3和o4-mini。
  • Vue 3 reactive 和 ref 区别及 失去响应性问题
  • 大数据常见的模型定义及应用场景建议╮(╯▽╰)╭
  • 深入理解常见排序算法:从原理到实践
  • 视频剪辑入门
  • 深入了解v-model的原理:v-model拆分为value属性和input事件,表单类组件的封装并用v-model简化代码
  • 是德科技E5080B网络分析仪深度评测:5G/车载雷达测试实战指南
  • 零基础上手Python数据分析 (16):DataFrame 常用统计分析方法
  • 【2025“华中杯”大学生数学建模挑战赛】C题:就业状态分析与预测 详细解题思路
  • ffmpeg 添加 nvenc支持
  • Layout 路由
  • 202520读书笔记|《我要按自己喜欢的方式去生活》——面对可能到来的裁员,那就等正式通知吧
  • SAP系统青果糖无法报工
  • 前沿要塞:Vue组件安全工程的防御体系重构与技术突围
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • 第十六届蓝桥杯大赛软件赛省赛 C++ 大学 B 组 部分题解
  • 解锁智能制造:PLC远程下载如何让设备运维效率提升10倍?
  • 【APM】Build an environment for Traces, Metrics and Logs of App by OpenTelemetry
  • Python网络爬虫设计(二)
  • DP 32bit位宽数据扰码实现和仿真
  • Oracle 19c部署之初始化实例(三)
  • [图论]Prim
  • docker的基础知识
  • 多模态大模型的算力需求预测:从理论FLOPs到实际集群配置(搭建算力成本评估模型的方法论)
  • 每日OJ_牛客_ruby和薯条_排序+二分/滑动窗口_C++_Java
  • 知识库Qanyting部署问题总结
  • 个人博客系统后端 - 用户信息管理功能实现指南(上)
  • Ubuntu利用docker搭建Java相关环境记录(二)
  • C++学习:六个月从基础到就业——面向对象编程:重载运算符(下)
  • 容器docker入门学习