vue中的生命周期及钩子函数

yizhihongxing

Vue 是一款流行的前端框架,它的设计理念是数据驱动视图。在 Vue 中,每个组件都有一组生命周期钩子函数。钩子函数是指在组件的某个时刻会被调用的函数。Vue 的生命周期分为四个阶段:创建、挂载、更新和销毁阶段。

创建阶段的生命周期钩子函数

在创建阶段,Vue 将会创建组件的实例,并先后调用以下生命周期钩子函数:

beforeCreate

在实例被创建之前,beforeCreate 将被调用。在这个阶段,组件实例还未创建,所以我们无法访问到 this 对象中的数据和方法,此时最好不要进行复杂的 DOM 操作。下面是一个示例:

export default {
  beforeCreate() {
    console.log('beforeCreate');
  },
};

created

created 将在实例被创建后立即调用。在这个阶段,组件实例已经被创建,可以访问到 this 对象中的数据和方法,但是组件还没有被挂载到文档中。下面是一个示例:

export default {
  created() {
    console.log('created');
  },
};

挂载阶段的生命周期钩子函数

在挂载阶段,Vue 将会将组件挂载到文档中,并先后调用以下生命周期钩子函数:

beforeMount

在挂载之前,beforeMount 将被调用。在这个阶段,组件已经被创建,但是还没有被挂载到文档中。此时可以对组件进行一些 DOM 操作。下面是一个示例:

export default {
  beforeMount() {
    console.log('beforeMount');
  },
};

mounted

在挂载后,mounted 将被调用。在这个阶段,组件已经被挂载到文档中,可以访问到 this 对象中的数据和方法,可以进行一些与 DOM 相关的操作。下面是一个示例:

export default {
  mounted() {
    console.log('mounted');
  },
};

更新阶段的生命周期钩子函数

在更新阶段,Vue 将会根据数据的变化,更新组件的状态,重新渲染组件,并先后调用以下生命周期钩子函数:

beforeUpdate

在数据更新时,beforeUpdate 将被调用。在这个阶段,组件的状态已经发生了变化,但是还没有重新渲染,此时可以对数据进行一些处理。下面是一个示例:

export default {
  beforeUpdate() {
    console.log('beforeUpdate');
  },
};

updated

在组件更新之后,updated 将被调用。在这个阶段,组件已经被重新渲染,可以访问到更新后的 DOM。此时应该避免更新数据,可能会导致死循环。下面是一个示例:

export default {
  updated() {
    console.log('updated');
  },
};

销毁阶段的生命周期钩子函数

在销毁阶段,Vue 将会销毁组件的实例,并先后调用以下生命周期钩子函数:

beforeDestroy

在组件销毁之前,beforeDestroy 将被调用。在这个阶段,组件还未被销毁,此时可以对组件进行一些清理工作,比如取消事件监听器和定时器。下面是一个示例:

export default {
  beforeDestroy() {
    console.log('beforeDestroy');
  },
};

destroyed

在组件销毁后,destroyed 将被调用。在这个阶段,组件已经被彻底销毁,无法访问到组件的数据和方法。下面是一个示例:

export default {
  destroyed() {
    console.log('destroyed');
  },
};

以上就是 Vue 中的生命周期及钩子函数的完整攻略。

示例1:

下面是一个简单的计时器组件,当组件被挂载和更新时,将会调用 setInterval 自动更新计时器的状态,而在组件被销毁时清除计时器。

<template>
  <div>{{ timer }}</div>
</template>

<script>
export default {
  data() {
    return {
      timer: 0,
      intervalId: null,
    };
  },
  mounted() {
    this.intervalId = setInterval(() => {
      this.timer++;
    }, 1000);
  },
  updated() {
    this.intervalId = setInterval(() => {
      this.timer++;
    }, 1000);
  },
  beforeDestroy() {
    clearInterval(this.intervalId);
  },
};
</script>

示例2:

下面是一个简单的表格组件,当组件更新时,将判断表单数据是否发生变化,如果有变化,则弹出确认弹窗。

<template>
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="item in items" :key="item.id">
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  props: {
    items: {
      type: Array,
      default: () => [],
    },
  },
  data() {
    return {
      prevProps: [],
    };
  },
  beforeUpdate() {
    this.prevProps = this.props.items;
  },
  updated() {
    if (JSON.stringify(this.props.items) !== JSON.stringify(this.prevProps)) {
      this.showConfirm();
    }
  },
  methods: {
    showConfirm() {
      if (confirm('The form data has been changed. Do you want to save it?')) {
        // save form data
      }
    },
  },
};
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中的生命周期及钩子函数 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 利用vue.js把静态json绑定bootstrap的table方法

    让我来详细讲解如何利用vue.js把静态json绑定bootstrap的table方法。 1. 引入依赖资源 首先,我们需要在HTML文件中引入所需的依赖资源,包括: <!– 引入Vue.js –> <script src="https://cdn.jsdelivr.net/npm/vue@3.0.0/dist/vue.esm…

    Vue 2023年5月28日
    00
  • vue基础之模板和过滤器用法实例分析

    让我来为你详细讲解“Vue基础之模板和过滤器用法实例分析”的完整攻略。 一、模板用法示例 1.1 双花括号语法 Vue 的模板语法基于 HTML,并扩展了一些特殊的属性。其中,最常用的是双花括号语法,通过它可以将 Vue 实例中的数据进行渲染。 例如,我们可以使用以下模板代码将 Vue 实例中的 message 数据渲染到页面中: <div id=&q…

    Vue 2023年5月27日
    00
  • uni-app常用的几种页面跳转方式总结

    关于“uni-app常用的几种页面跳转方式总结”,我可以给出一份完整攻略,并介绍两种具体的示例。 uni-app常用的几种页面跳转方式总结 一、vue-router vue-router 是 vue.js 官方的路由插件。在 uni-app 中,我们可以通过引入 vue-router 并为每个页面指定路由,来进行页面间的跳转。 具体操作步骤如下: 1. 安装…

    Vue 2023年5月27日
    00
  • VUE中常用的四种高级方法总结

    下面我将为大家详细讲解“Vue中常用的四种高级方法总结”。 一、Vue中常用的四种高级方法 在Vue中,经常会用到一些高级方法,这些方法可以让我们更加方便地管理和处理数据。下面,我们来一一介绍这些方法: 1. 计算属性 计算属性(Computed)是Vue中常用的方法之一,它可以将我们的数据进行过滤、加工后再渲染到页面上,还可以解决重复调用的问题。计算属性的…

    Vue 2023年5月27日
    00
  • 详解VUE项目中安装和使用vant组件

    好的!关于“详解VUE项目中安装和使用vant组件”的完整攻略,下面提供如下步骤和示例: 步骤1:安装vant 你可以通过npm或yarn安装vant,这里以npm为例,输入以下命令: npm install vant -S 步骤2:在VUE项目中使用vant 方法1:按需引入 由于vant的体积较大,我们可以只引入需要的组件,从而减小体积。在使用前,我们首…

    Vue 2023年5月28日
    00
  • Vue核心概念Action的总结

    下面是Vue核心概念Action的总结的完整攻略。 什么是Action Action是Vuex服务于mutations的触发器,用于处理异步请求和复杂的逻辑。 Action的语法 在Vuex中,定义一个Action的语法如下: actions: { actionName (context, payload) { // 逻辑处理 } } 其中,actions是…

    Vue 2023年5月27日
    00
  • vue在取对象长度length时候出现undefined的解决

    当使用Vue框架的语法时,在某些情况下从一个对象中获取其长度属性时,可能会返回undefined。这通常是由于Vue对象中有未定义的属性造成的。下面是解决这种问题的方法。 方法一:使用计算属性 我们可以使用计算属性来获取Vue对象的长度。通过计算属性,我们可以遍历对象并返回正确的长度。 <template> <div>{{ objec…

    Vue 2023年5月27日
    00
  • vue 数据操作相关总结

    Vue 数据操作相关总结 在 Vue 中,我们经常需要对数据进行一系列的操作,包括数据的绑定、修改、计算等。本文将总结 Vue 中常用的数据操作方法,并提供相关的示例。 Vue 数据双向绑定 Vue 的数据双向绑定非常方便,在 HTML 模板中,我们只需要使用 v-model 指令,即可实现对数据的双向绑定。例如: <template> <…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部