vue3--生命周期

参考:https://blog.csdn.net/qq_42445025/article/details/121978510

在这里插入图片描述
在这里插入图片描述
主要Vue生命周期事件被分为两个钩子,分别在事件之前和之后调用,vue应用程序中有4个主要事件(8个钩子):

创建 ---- 在组建创建时执行
挂载 ---- DOM被挂载时执行
更新 ---- 当响应数据被修改时执行
销毁 ---- 在元素被销毁之前立即执行
在【options API】中,生命周期钩子是被暴露在vue实例上的选项,我们只需要调用使用即可。

在【composition API】中,我们需要将生命周期钩子导入项目,然后才能使用。

import {onMounted} from 'vue'

在这里,beforecreate和created被setup方法本身所替代,我们在在setup中将会访问到9个生命周期:

onBeforeMount:在挂载之前被调用,渲染函数render首次被调用

onMounted:组件挂载时调用

onBeforeUpdate:数据更新时调用,发生在虚拟DOM打补丁之前。

onUpdated:因数据更改导致的虚拟DOM重新渲染和打补丁时调用

onBeforeUnmount:在卸载组件实例之前调用,此阶段的实例依旧是正常的。

onActivated:被keep-alive缓存的组件激活时调用

onDeactivated:被keep-alive缓存的组件停用时调用

onErrorCaptured:当捕获一个来自子孙组件的错误时被调用,有三个参数:错误对象、发生错误的组件实例、一个包含错误来源信息的字符串;此钩子会返回false来阻止改错误继续向上传播。

代码:
app:

<template>
  <!-- vue3的组件中的模板结构可以没有根标签 -->
  <h1>一个人的信息</h1>
  <h2>姓名:{{person.name}}</h2>
  <h2>年龄:{{person.age}}</h2>
  <h2>工作:{{person.job.type}}</h2>
  <h2>薪水:{{person.job.salary}}</h2>
  <h2>爱好:{{person.hobby}}</h2>
  <button @click="changeInfo">修改人的信息</button>
  <!-- <Demo @hello="showHelloMsg" msg="你好啊">
    <template v-slot:qwe>
      <span>春风霓裳</span>
    </template>
  </Demo> -->
  <WatchDemo/>
   <button @click="isShowDemo = !isShowDemo">切换隐藏/显示</button>
   <LiveCycleDemo v-if="isShowDemo"/>
</template>

<script>
import { ref, reactive } from "vue";
import Demo from "./components/Demo";
import WatchDemo from "./components/WatchDemo";
import LiveCycleDemo from "./components/LiceCycleDemo";
export default {
  name: "App",
  components: { Demo,WatchDemo,LiveCycleDemo },
  // // vue2的写法
  // data() {
  //   return {

  //   }
  // },
  // methods: {

  // },
  //
  // 此处测试一下setup,暂时不考虑响应式
  setup() {
    // 数据
    // let name = ref('张三')
    // let age = ref(18)
    // // let job = ref({
    // //     type:'前端工程师',
    // //     salary:'30k'
    // //   })
    //  let job = reactive({
    //     type:'前端工程师',
    //     salary:'30k'
    //   })
    //   let hobby = reactive(['抽烟','喝酒','烫头'])
    let isShowDemo = ref(true)
    let person = reactive({
      name: "张三",
      age: 18,
      job: {
        type: "前端工程师",
        salary: "30k",
      },
      hobby: ["抽烟", "喝酒", "烫头"],
    });

    // 方法
    function changeInfo() {
      person.name = "李四";
      person.age = 48;
      // job.value.type = 'UI设计师'
      person.job.type = "UI设计师";
      console.log(person);
      // console.log(name,age)
      person.hobby[0] = "学习";
    }
    function showHelloMsg(value) {
      alert(`你触发了hello事件,我收到的参数是:${value}`);
    }

    return {
      // name,
      // age,
      // job,
      // hobby,
      person,
      changeInfo,
      showHelloMsg,
      isShowDemo,
    };
  },
};
</script>

<style>
</style>

demo:

<template>
<h2>当前求和为:{{sum}}</h2>
<button @click="sum++">点我加一</button>
</template>

<script>
import { ref, reactive, onBeforeMount,onMounted,onBeforeUpdate,onUpdated,
onBeforeUnmount,onUnmounted} from "vue";
export default {
  name: "LiveCycleDemo",
  setup(){

    console.log('------------setup-------------------')
    // 数据
    let sum = ref(0)

//  通过组合api形式写生命周期钩子
       onBeforeMount(()=>{
          console.log('------------onBeforeMount------------')
       }),
       onMounted(()=>{
        console.log('------------onMounted------------')
       }),
       onBeforeUpdate(()=>{
        console.log('------------onBeforeUpdate------------')
       }),
       onUpdated(()=>{
        console.log('------------onUpdated------------')
       }),
       onBeforeUnmount(()=>{
        console.log('------------onBeforeUnmount------------')
       }),
       onUnmounted(()=>{
        console.log('------------onUnmounted------------')
       })

    // 返回一个对象(常用)
    return {
      sum,
    }


  },
  // #region
  // 通过配置项形式写生命周期钩子
//   beforeCreate() {
//     console.log('-----------beforeCreate-------------');
//   },
//  created() {
//     console.log('-----------created-------------');
//   },
//    beforeMount() {
//     console.log('-----------beforeMount-------------');
//    },
//    mounted() {
//     console.log('-----------mounted-------------');
//   },
//    beforeUpdate() {
//     console.log('-----------beforeUpdate-------------');
//   },
//    updated() {
//     console.log('-----------updated-------------');
//   },
//    beforeUnmount() {
//     console.log('-----------beforeUnmount-------------');
//   },
//    unmounted() {
//     console.log('-----------unmounted-------------');
//   }
  // #endregion

}
</script>

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值