Vue学习计划-Vue3--核心语法(五)生命周期、自定义Hook

1. 生命周期
  • 概念: Vue组件实例在创建时要经历一些列的初始化步骤,在此过程中vue会在合适的时机,调用特定函数,从而让开发中有机会在特定阶段运行自己的代码,这些特定的函数统称为:生命周期钩子
  • 规律:

生命周期整体分为四个阶段:分别是:创建、挂载、更新、销毁,每个阶段都有两个钩子,一前一后

  • Vue2的生命周期

创建阶段:beforeCreatecreated

挂载阶段:beforeMountmounted

更新阶段: beforeUpdateupdated

销毁阶段:beforeDestroydestroyed

  • Vue3的生命周期

创建阶段:setup

挂载阶段:onBeforeMountonMounted

更新阶段:onBeforeUpdateonUpdated

卸载阶段:onBeforeUnmountonMounted

  • 常用的钩子:onMounted(挂载完毕)、onUpdated(更新完毕)、onBeforeUnmount(卸载之前)

  • 示例代码

    <template>

    当前值为{{ num }}

    <button @click="changeSum">点击加1</button>
    </template> <script setup lang="ts"> import {ref, onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted} from 'vue' let num = ref(0)

    function changeSum() {
    num.value += 1
    }
    console.log('创建')

    onBeforeMount(() => {
    console.log('挂载之前')
    })
    onMounted(() => {
    console.log('挂载完毕')
    })
    onBeforeUpdate(() => {
    console.log('更新之前')
    })
    onUpdated(() => {
    console.log('更新完毕')
    })
    onBeforeUnmount(() => {
    console.log('卸载之前')
    })
    onUnmounted(() => {
    console.log('卸载完毕')
    })

    </script>
2. 自定义Hook
  • 什么是hook? ------------本质是一个函数,把setup函数中使用的Composition API进行了封装,类似与Vue2中的mixin
  • 自定义hook的优势:复用代码,让setup中的逻辑更清楚易懂
  • hooks文件夹中,每一个功能的hook文件期望是usexxx命名的
  • hook的出现诠释了composition API 的终极意义
  • 示例代码
    1. useSum.ts中内容如下:

      import { ref, computed, onMounted } from 'vue'

      export default function() {
      let sum = ref(0)

      let bigSum = computed(()=> {
      return sum.value * 10
      })

      onMounted(()=> {
      changeSum()
      })

      function changeSum(){
      sum.value += 1
      }

      return {sum, bigSum, changeSum}
      }

    2. useDog.ts中内容如下:

      import { reactive, onMounted } from 'vue'
      import axios from 'axios'

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

      async function getDog(){
      try{
      let {data} = await axios.get('https://dog.ceo/api/breed/pembroke/images/random')
      dogList.push(data.message)
      } catch(error){
      alert(error)
      }
      }
      onMounted(() => {
      getDog()
      })

      return {dogList, getDog}
      }

    3. 组件中具体使用:

      <template>

      当前值为{{ sum }}, 变大10倍的值是: {{ bigSum }}

      <button @click="changeSum">点击加1</button>
      <button @click="getDog">添加一只狗</button>
      </template> <script setup lang="ts"> import useSum from '@/hooks/useSum' import useDog from '@/hooks/useDog'

      let { sum, bigSum, changeSum } = useSum()
      let { dogList, getDog } = useDog()
      </script>

      <style scoped> img{ height: 150px; margin-right: 10px; } </style>
相关推荐
心中有国也有家40 分钟前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
Upsy-Daisy1 小时前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
放下华子我只抽RuiKe52 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
LuminousCPP2 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
XinZong2 小时前
OpenClaw 实现双重心跳(Heartbeat)+ clawreach虾聊项目实现
javascript
魔法阵维护师2 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
_李小白3 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
一只机电自动化菜鸟3 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
2301_818730564 小时前
numpy的学习(笔记)
学习·numpy
还有多久拿退休金4 小时前
一张栈的图,治好你面试答不出 script 阻塞的病
前端·javascript