深入理解Vue 的钩子函数

Vue 的钩子函数是 Vue 实例在特定时期执行的函数。这些函数提供了扩展 Vue 行为的机会,例如在实例创建前和销毁后执行某个操作,或者在数据更新时执行一些代码。

Vue 的钩子函数分为两种:生命周期钩子函数和自定义钩子函数。

生命周期钩子函数

Vue 实例的生命周期从创建到销毁一共有 8 个时期,每个时期都有对应的生命周期钩子函数。下面逐一介绍并举例说明。

beforeCreate

在实例创建之前执行。此时实例的 data、computed、methods、watcher 都还未初始化。

export default {
  beforeCreate() {
    console.log('beforeCreate执行了');
  }
}

created

在实例创建之后执行。此时实例已经完成了 data、computed、methods 都初始化,并且 DOM 元素还未挂载到页面中。

export default {
  created() {
    console.log('created执行了');
  }
}

beforeMount

在 DOM 元素挂载到页面之前执行。此时实例已经完成了 template 转换成 DOM 对象,但还没有挂载到页面中。

export default {
  beforeMount() {
    console.log('beforeMount执行了');
  }
}

mounted

在 DOM 元素挂载到页面后执行。此时实例已经成功地挂载到了页面中,并且可以通过 DOM API 操作页面元素。

export default {
  mounted() {
    console.log('mounted执行了');
  }
}

beforeUpdate

在数据更新时执行,但 DOM 还未更新。此时可以对数据进行操作。

export default {
  beforeUpdate() {
    console.log('beforeUpdate执行了');
  }
}

updated

在数据更新后执行,并且 DOM 已经更新完毕。

export default {
  updated() {
    console.log('updated执行了');
  }
}

beforeDestroy

在实例销毁之前执行。此时实例还没有销毁,可以在这里进行资源释放、事件解绑等操作。

export default {
  beforeDestroy() {
    console.log('beforeDestroy执行了');
  }
}

destroyed

在实例销毁之后执行。此时实例已经完全销毁,无法访问实例的 data、methods 等属性。

export default {
  destroyed() {
    console.log('destroyed执行了');
  }
}

自定义钩子函数

除了 Vue 实例的生命周期钩子函数,我们还可以自定义钩子函数。自定义钩子函数是为了让组件之间解耦,避免组件之间直接耦合调用。

举例来说,假设有两个组件 A 和 B,组件 A 需要在某个时刻执行组件 B 的某个方法,但是组件 A 并不知道组件 B 的存在,也不应该调用组件 B 的方法。这种情况可以使用自定义钩子函数来实现。

首先在组件 B 中定义一个自定义钩子函数:

export default {
  created() {
    // 在created生命钩子函数中调用自定义钩子函数
    this.$emit('hello', '组件B的hello方法被执行了!');
  }
}

然后在组件 A 中监听这个自定义钩子函数:

export default {
  created() {
    // 监听名为hello的自定义钩子函数
    this.$on('hello', message => {
      console.log(message);
    });
  }
}

通过自定义钩子函数,组件 A 和 B 实现了解耦,互不知道对方的存在,但是可以通过自定义钩子函数实现相互通信。

总结

Vue 的钩子函数为开发者提供了丰富的扩展 Vue 行为的机会,可以利用好这些钩子函数,合理地分配生命周期和自定义行为以及组件之间通信。可以提高代码的可维护性和可扩展性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解Vue 的钩子函数 - Python技术站

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

相关文章

  • Vue props用法详解(小结)

    Vue props用法详解(小结) 在Vue中,props是一个常用的属性传递方式。它允许你从父组件向子组件传递数据。 基本用法 父组件中,使用v-bind指令向子组件传递数据。子组件中,定义props属性接收数据。 以下是一个简单的例子: <!– 父组件 –> <template> <div> <child-c…

    Vue 2023年5月27日
    00
  • java实现微信公众平台发送模板消息的示例代码

    下面我为您详细讲解如何使用Java实现微信公众平台发送模板消息的示例代码。这里演示的是使用第三方开源工具Weixin-java-tools来实现。 首先,我们需要创建微信公众平台账号,并在账号中创建模板消息。具体创建过程可以参考微信公众平台的相关文档。创建完毕后,我们需要获取到模板消息的模板ID和需要替换的关键字。 接下来就可以开始使用Weixin-java…

    Vue 2023年5月28日
    00
  • 关于vue2响应式缺陷的问题

    问题描述: 在Vue2中使用响应式数据,如果一个对象的属性不存在,那么对于该属性的修改并不会触发视图的更新。 解决方法: 1.使用Vue.set()方法手动触发更新 Vue.set()是Vue提供的一种修改响应式对象的方法,可以更新对象的属性并触发视图更新。使用方法如下: Vue.set(vm.someObject, ‘key’, value); 其中,vm…

    Vue 2023年5月29日
    00
  • Vue中使用定时器(setInterval、setTimeout)的两种方式

    Vue是一款流行的JavaScript前端框架,开发者常常需要在Vue中使用定时器,来实现许多不同的功能,例如:轮播图、自动刷新等等。Vue中有两种主要的方式可以使用定时器:基础绑定方式和组件方法。 基础绑定方式 基础绑定方式是通过Vue自带的指令v-bind实现的,一般选择setTimeout的方式。语法如下: <template> <d…

    Vue 2023年5月29日
    00
  • 十分钟封装一个好用的axios步骤示例

    下面我将详细讲解“十分钟封装一个好用的axios步骤示例”的完整攻略。 1. 引入axios 首先,我们需要在项目中引入axios,可以通过npm或者CDN的方式引入。比如,在Vue项目中,我们可以在main.js入口文件中引入axios: import axios from ‘axios’ Vue.prototype.$http = axios 这样就可以…

    Vue 2023年5月28日
    00
  • Vue filter介绍及详细使用

    Vue filter介绍及详细使用攻略 1. 什么是Vue filter Vue filter是Vue的一个功能,在Vue组件模板中使用{{ someData | filterName }}的方式,可以对一些字符串、数字、日期等进行处理,返回新的字符串、数字、日期等内容。可以用于格式化展示数据、处理一些业务逻辑等。 2. 如何定义Vue filter 在Vu…

    Vue 2023年5月28日
    00
  • Vue实现DOM元素拖放互换位置示例

    以下是“Vue实现DOM元素拖放互换位置”示例的完整攻略: 步骤1:安装Vue和Vue-Draggable插件 首先需要在你的项目中安装Vue和Vue-Draggable插件。Vue-Draggable是一个实现可拖动DOM元素的Vue.js组件,支持多种拖动方式。 npm install –save vue npm install –save vued…

    Vue 2023年5月27日
    00
  • 函数式组件劫持替代json封装element表格

    为了更好地解释“函数式组件劫持替代json封装element表格”的攻略,本次讲解分为以下几个步骤: 了解函数式组件 了解 Element 表格组件 劫持 Element 表格组件 在函数式组件中使用劫持的 Element 表格组件 示例演示 1. 了解函数式组件 函数式组件是 React 的一种组件类型,它是一个无状态的组件,只接收 props,返回一个 …

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