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

vue 入门:生命周期

文章目录

  • vue组件的生命周期
    • 创建阶段
    • 更新阶段
    • 销毁阶段
    • 生命周期钩子函数

vue组件的生命周期

  1. 创建阶段、销毁阶段:只会执行一次
  2. 更新阶段:会执行多次
    在这里插入图片描述

创建阶段

在这里插入图片描述
beforeCreate
在实例初始化之后,数据观测(data observer)和事件配置之前被调用。此时,data 和 methods 中的属性都还未初始化,因此无法访问。
应用场景:通常用于初始化一些不依赖于数据的变量或配置。

created
在实例创建完成后被调用。此时,data 和 methods 已经初始化完成,但 DOM 还未挂载,不能访问到 DOM 元素。
应用场景:适合进行数据初始化、API 请求等操作,但不涉及 DOM 操作。

beforeMount
在挂载开始之前被调用,此时模板已经被编译,但尚未挂载到 DOM 上。可以访问到 this.$el,但 this.$el 还没有被挂载到页面上。
应用场景:适合在挂载之前对模板进行最后的调整。

mounted
在挂载完成后被调用,此时组件已经挂载到 DOM 上,可以访问到 this.$el
应用场景:适合进行 DOM 操作、绑定事件监听器、调用第三方库等。

更新阶段

在这里插入图片描述
beforeUpdate
在数据更新之前被调用,此时组件的 DOM 还未更新,但数据已经发生变化。
应用场景:适合在更新之前进行一些性能优化或数据校验。

updated
在数据更新完成后被调用,此时组件的 DOM 已经更新。
应用场景:适合在更新完成后进行 DOM 操作或清理工作

销毁阶段

在这里插入图片描述
beforeDestroy(Vue 2.x)/ beforeUnmount(Vue 3.x)
在销毁之前被调用,此时组件仍然可用,但即将被销毁。
应用场景:适合进行清理工作,如解绑事件监听器、清除定时器等。

destroyed(Vue 2.x)/ unmounted(Vue 3.x)
在销毁完成后被调用,此时组件已经完全销毁,无法再访问。
应用场景:通常用于调试或日志记录。

生命周期钩子函数

Clock.vue

<template>
  <div>
    
    {{ log("render") }}

    {{ now }}

    <button @click="start = !start">{{ start ? "停止" : "开始" }}</button>
    
  </div>
</template>
<script>
import moment from "moment";

export default {
  data: function () {
    console.log("data");
    this.moment = moment;
    this.log = window.console.log;
    return {
      now: moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
      start: false
    };
  },
  watch: {
    start() {
      this.startClock();
    }
  },

  // 创建阶段 start
  beforeCreate() {
    console.log("beforeCreate");
  },
  created() {
    console.log("created");
  },
  beforeMount() {
    console.log("beforeMount");
  },
  mounted() {
    console.log("mounted");
    this.startClock();
  },
  // 创建阶段 end


  // 更新阶段 start
  beforeUpdate() {
    console.log("beforeUpdate");
  },
  updated() {
    console.log("updated");
  },
  // 更新阶段 end


  // 销毁阶段 start
  beforeDestroy() {
    console.log("beforeDestroy");
    clearInterval(this.clockInterval);
  },
  destroyed() {
    console.log("destroyed");
  },
  // 销毁阶段 end

  methods: {
    startClock() {
      clearInterval(this.clockInterval);
      if (this.start) {
        this.clockInterval = setInterval(() => {
          this.now = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
        }, 1000);
      }
    }
  }
};
</script>

index.vue

<template>
  <div>
    <a-tabs>
      <a-tab-pane key="clock" tab="时钟">
        <button @click="destroyClock = !destroyClock">
          {{ destroyClock ? "加载时钟" : "销毁时钟" }}
        </button>

        <Clock v-if="!destroyClock"/>
      </a-tab-pane>

    </a-tabs>
  </div>
</template>
<script>
import Clock from "./Clock";

export default {
  components: {
    Clock
  },
  data() {
    return {
      destroyClock: false,
      name: "vue"
    };
  }
};
</script>

相关文章:

  • 【第16届蓝桥杯C++C组】--- 数位倍数
  • Leetcode:二叉树
  • 简述一下Unity的UnityWebRequest
  • 第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
  • STM32 低功耗模式下 RTC唤醒 和 PA0唤醒 的配合使用
  • HTML — 定位
  • leetcode精选合集(更新中)
  • Istio常用命令
  • kafka4.0浅尝辄止
  • 使用uv管理python项目环境
  • STM32单片机入门学习——第34节: [10-4] I2C通信外设
  • Mysql -- 基础
  • 数据库表的操作
  • Ethers.js 开发入门:核心功能、最佳实践与避坑指南
  • TP8 PHP 支付宝-通用版-V3 SDK 接口加签方式为证书方式
  • 手撕TCP内网穿透及配置树莓派
  • 【DDR 内存学习专栏 1.2 -- DDR Channel 介绍】
  • 【webSocket协议】进阶实战案例(Spring 原生低层 API)
  • Python基础语法1
  • C# 混淆代码工具--ConfuserEx功能与使用指南
  • 五一假期首日,多地党政主官暗访督查节日安全和值班值守工作
  • 空间站第八批科学实验样品返抵地球并交付科学家
  • 专家分析丨乌美签署矿产协议,展现美外交困境下的无奈
  • 今年五一假期出游人群规模预计比去年提升8%,哪里最热门?
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 全文丨中华人民共和国民营经济促进法