全栈开发之路——前端篇(6)生命周期和自定义hooks

全栈开发一条龙——前端篇
第一篇:框架确定、ide设置与项目创建
第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。
第三篇:setup语法,设置响应式数据。
第四篇:数据绑定、计算属性和watch监视
第五篇 : 组件间通信及知识补充

辅助文档:HTML标签大全(实时更新)

本篇将讲述生命周期和自定义hooks,非常重要,请务必搞懂

文章目录

  • 一、生命周期(函数)
  • 二、Vue2的生命周期
      • 1.创建前/创建完毕
      • 2.挂载前/挂载完毕
      • 3.更新前/更新完毕
      • 4.销毁前/销毁后
  • 三、Vue3的生命周期
      • 1.创建
      • 2.挂载
      • 3.更新
      • 4.卸载(即Vue2的销毁)
      • 5.嵌套组件的生命周期
  • 生命周期总结
  • 四、自定义hooks

一、生命周期(函数)

组件的生命周期就是组件创建(created)、挂载(mounted)、更新(update)和销毁的过程,我们可以通过调用生命周期函数,在这些过程前后进行操作。

二、Vue2的生命周期

我们之所以要讲Vue2,是因为Vue2与Vue3有相通之处但也有不同的地方,而有些项目是用Vue2写的,为了防止理解出现障碍,故先说Vue2的生命周期。

1.创建前/创建完毕

在创建阶段,有两个生命周期函数:创建前函数和创建后函数。分别为beforeCreate 和 created


在组件创建前后,会自动执行你写在其中的函数(你可以将各个生命周期函数的顺序打乱,不影响Vue自动在对应事件时调用函数)。

2.挂载前/挂载完毕

我们用beforeMount和mounted来写挂载的生命周期函数。
所谓挂载,就是你写的内容出现在html页面上的过程。我们,可以用debugger;(断点测试)来更好的理解这个过程。


页面直接为空了,说明未能挂载成功。

3.更新前/更新完毕

我们用 beforeUpdate 和 updated来调用。

比如有一个按钮,你点击以下counter就加1.
在你不点击的时候,before和uodated都不会调用。当你点击之后,会先调用before,更改完之后,会调用updated。

4.销毁前/销毁后

我们用beforeDestroy和destroyed来调用
某个组件如果有存在条件,则在条件不满足的时候会被销毁,就会进入销毁这个生命周期。

三、Vue3的生命周期

1.创建

Vue3直接用setup模拟create过程了,没有before和created的区分了。

2.挂载

你先要引入onBeforeMount。
import {onBeforeMount} from vue'
再调用时,我们要这个函数中加入一个回调函数,这个回调函数就是在挂载时调用的。

onBeforeMount( ()=>{  } )

同理有挂载完毕时调用的为onMounted

3.更新

用法与挂载一致。请先引入onBeforeUpdateonUpdated,然后在其中加入回调函数属性。

4.卸载(即Vue2的销毁)

同理,函数名为onBeforeUnmountonUnmounted

5.嵌套组件的生命周期

在父子组件中,子的优先于父的。

假设图片中为父组件调用子组件的案例,Vue会先创建挂载完person中的所有内容,才会回到父组件继续加载。所以子组件优先于父组件加载。

生命周期总结


比较常用的有
1.挂载完毕 : onMounted
2.更新完毕 : onUpdated
3.卸载之前 : onBeforeUnmount

四、自定义hooks

想要运行这个例子,请先安装npm i axios(在终端运行)
由于笔者喜欢边牧,下面的例子以随机获取一只边牧为例。

<template>
    <div class = "style_test">    
        <button @click="add_border_collie">添加一只边牧!</button>   
    <hr>
   <img v-for="(bc,index) in border_collie" :src="bc" :key="index" class="sizee">
   </div>
   <div class = "style_test">   
    <button @click="add_dog">随机添加一只狗</button>   
    <hr>
   <img v-for="(bc,index) in dog" :src="bc" :key="index" class="sizee">
   
   </div>
</template>

<script lang="ts">
    export default {
        name : 'Test'//组件名
    }
</script>

<script lang="ts" setup>
     import {reactive, ref} from 'vue'
     import axios from 'axios';

     let border_collie=reactive([])
     let dog=reactive([])

     async function add_border_collie(){
        try{
       let result=await axios.get('https://dog.ceo/api/breed/collie/border/images/random')
       border_collie.push(result.data.message)
          } catch(error){alert(error)}
            
    }

    async function add_dog(){
        try{
       let result=await axios.get('https://dog.ceo/api/breeds/image/random')
       dog.push(result.data.message)
          } catch(error){alert(error)}
            
    }
     
</script>

<style scoped>
  .style_test{
       background-color: rgb(208, 223, 40);
       box-shadow: 0 0 10px;
       border-radius:10px;  
       padding: 20px;
  }
  .sizee{
      height: 150px;
      margin-right: 10px;
  }
</style>


为了照顾不喜欢边牧的人,我们又添加了一个随机添加狗狗。这就导致代码一大坨,不好维护,而且事实上,这与vue2也没什么区别。
那么接下来我们就要说到自定义hook(前端的模块化编程)。
我们现在src文件夹下建立hooks文件,然后在这个文件夹中新建一个.ts文件。

把一个模块需要用的所有内容写进去,然后return一个外部可以调用的接口即可。比如这里我把获取边牧图片的模块放了进去

import {reactive, ref} from 'vue'
import axios from 'axios';


export default function (){
    let border_collie=reactive([])

    async function add_border_collie(){
       try{
      let result=await axios.get('https://dog.ceo/api/breed/collie/border/images/random')
      border_collie.push(result.data.message)
         } catch(error){alert(error)}        
    }
     return {border_collie,add_border_collie}
}

之后,在父亲组件中,我们需要引入,引入使用就行了。

import get_bc from '@/hooks/get_bc';
    const {border_collie,add_border_collie} = get_bc()

功能完全不变。这就给我们提供了一个可以封装的写法,防止主组件过于乱,方便维护,方便结对编程。
hooks是Vue3组合式API的真谛

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合&#xff0c;一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举&#xff1a;相当于是创建一个自定义的枚举类型 申明枚…

十大标准:评价B端系统界面美感度,你看了你也会。

美感和易用是评价B端系统用户体验的最高原则&#xff0c;本期从先从美感角度来分析B端界面 评价B端系统界面美感度的十大标准可以根据设计原则和用户体验来进行评估&#xff0c;以下是一些常见的标准&#xff1a; 一致性 界面元素的风格、布局和交互应该保持一致&#xff0c;…

Flutter连接websocket、实现在线聊天功能

老规矩效果图: 第一步:引入 web_socket_channel: ^2.4.0 第二步:封装 websocket.dart 单例 import dart:async; import dart:convert; import package:web_socket_channel/web_socket_channel.dart; import package:web_socket_channel/io.dart;class WebSocketManager {…

森林消防—高扬程水泵:守护绿色屏障的专业利器/恒峰智慧科技

在广袤的森林中&#xff0c;火灾无疑是最具破坏性的灾难之一。为了及时应对森林火灾&#xff0c;保护珍贵的自然资源和生态平衡&#xff0c;高效的消防设备显得尤为重要。森林消防高扬程水泵便是其中一款专业设备&#xff0c;以其高效输送水源的能力&#xff0c;成为守护森林绿…

Denoising diffusion models for out-of-distribution detection

Denoising diffusion models for out-of-distribution detection 摘要1 介绍2 相关工作2.1 基于生成得方法2.2 基于重构的方法3 方法3.1.扩散模型3.2.多次重建3.3.相似性评估4实验4.1. Experimental details4.2. Results for computer vision datasets4.3医学数据集上的结果4.4…

python 12实验

1.导入数据。 2.清洗数据&#xff0c;将缺失值或“NAN”替换为“无”&#xff0c;并将文本数据转换为数值型数据。 3.使用聚类算法&#xff08;如KMeans&#xff09;对数据进行聚类&#xff0c;并计算样本到簇中心的平均距离以确定最佳的簇数量。 4.对数据进行PCA降维&#xff…

Django Admin后台管理:高效开发与实践

title: Django Admin后台管理&#xff1a;高效开发与实践 date: 2024/5/8 14:24:15 updated: 2024/5/8 14:24:15 categories: 后端开发 tags: DjangoAdmin模型管理用户认证数据优化自定义扩展实战案例性能安全 第1章&#xff1a;Django Admin基础 1.1 Django Admin简介 Dj…

AI预测福彩3D第10套算法实战化赚米验证第1弹2024年5月5日第1次测试

从今天开始&#xff0c;准备启用第10套算法&#xff0c;来验证下本算法的可行性。因为本算法通过近三十期的内测&#xff08;内测版没有公开预测结果&#xff09;&#xff0c;发现本算法的预测结果优于其他所有算法的效果。彩票预测只有实战才能检验是否有效&#xff0c;只有真…

旅游出行大热!景区电话却打不通了?

根据文化和旅游部5月6日发布的数据显示,今年“五一”假期,全国国内旅游出游合计2.95亿人次。 这个数据可以看出出游的热度是非常高的&#xff0c;但有网友表示在旅游的时候遇到糟心的事情&#xff0c;比如无法联系到景区&#xff0c;网友吐槽自己打电话20次仅仅接通了一次&…

前端奇怪面试题总结

面试题总结 不修改下面的代码进行正常解构 这道题考的是迭代器和生成器的概念 let [a,b] {a:1,b:2}答案 对象缺少迭代器&#xff0c;需要手动加上 Object.prototype[Symbol.iterator] function* (){// return Object.values(this)[Symbol.iterator]()return yeild* Object.v…

场外期权个股怎么对冲?

今天期权懂带你了解场外期权个股怎么对冲&#xff1f;场外个股期权是一种在非交易所市场进行的期权交易&#xff0c;它允许投资者针对特定的股票获得未来买入或卖出的权利。 场外期权个股怎么对冲&#xff1f; 持有相反方向的期权&#xff1a;这是最直接的对冲方法&#xff0c…

一分钟教你学浪app视频怎么缓存

你是否在学浪app上苦苦寻找如何缓存视频的方法&#xff1f;你是否想快速、轻松地观看自己喜欢的视频内容&#xff1f;那么&#xff0c;让我们一起探索一分钟教你如何缓存学浪app视频的技巧吧&#xff01; 学浪下载工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下…

【数据分享】2006—2022年我国城市级别的市政设施水平相关指标(免费获取)

市政公用设施水平&#xff0c;作为衡量一座城市基础设施建设情况的核心指标之一&#xff0c;其完善程度、运行效率以及服务质量&#xff0c;不仅直接关乎城市的日常运转与居民生活质量&#xff0c;更是评估城市综合竞争力、宜居性以及可持续发展能力的关键要素。 我们发现在《…

unity-C#调用百度千帆AppBuilder的OpenApi

目录 功能描述准备工作百度智能云账号创建应用编辑应用创建Api秘钥Api调用流程unity代码Unitywebrequest非流式流式注意事项 Restsharp 功能描述 使用百度千帆AppBuilder平台,通过api调用的方式实现AI大模型对话功能(文字) 准备工作 百度智能云账号 请自行在百度智能云进行…

001_Langchain

LangChain LangChain 是一个开源框架,旨在帮助开发者使用大型语言模型(LLMs)和聊天模型构建端到端的应用程序。它提供了一套工具、组件和接口,以简化创建由这些模型支持的应用程序的过程。LangChain 的核心概念包括组件(Components)、链(Chains)、模型输入/输出(Mode…

Failed to build flash-attn:ERROR: Could not build wheels for flash-attn

安装 FlashAttention 的时候遇到报错&#xff1a; Failed to build flash-attn ERROR: Could not build wheels for flash-attn, which is required to install pyproject.toml-based projects可能是安装的版本与环境存在冲突吧&#xff0c;我的环境是&#xff1a; python 3.1…

GRU模块:nn.GRU层的介绍

如果需要深入理解GRU的话&#xff0c;那么内部实现的详细代码和计算公式就比较重要&#xff0c;中间的一些过程和变量的意义需要详细关注&#xff0c;只有这样&#xff0c;才能准备把握这个模块的内涵和意义&#xff0c;设计初衷和使用方式等等&#xff0c;所以&#xff0c;仔细…

值得推荐的多款iPaaS工具

当今企业面临着日益复杂的数据和系统集成挑战&#xff0c;为了提高业务效率和灵活性&#xff0c;许多企业转向了iPaaS工具&#xff08;Integration Platform as a Service&#xff0c;即集成平台即服务&#xff09;。iPaaS工具可以帮助企业轻松地连接和集成各种应用程序、数据和…

如何切换PHP版本

如果服务器上安装了多个php&#xff0c;可能会导致默认的php版本错误&#xff0c;无法启动swoole等服务&#xff0c; 查看命令行的php版本方法&#xff1a;https://q.crmeb.com/thread/9921 解决方法如下&#xff0c;选一个即可&#xff1a; 一、切换命令行php版本&#xff…

servlet-会话(cookie与session)

servlet会话技术 会话技术cookie创建Cookieindex.jspCookieServlet 获取Cookieindex.jspshowCookie session创建sessionindex.jsplogin.jspLoginServlet 获取sessionRedurectServket 清除会话login.jspClearItmeServlet 会话技术 两种会话&#xff1a;cookie&#xff0c;sessi…