Vue2的Keep-Alive 有哪些生命周期钩子函数

开发 前端
当 MyComponent​ 被隐藏时,它会被 <keep-alive>​ 缓存起来,并且会调用 deactivated​ 钩子;当再次显示时,会调用 activated 钩子。

1. vue2的keep-alive  有哪些生命周期钩子函数

在 Vue 2 中,<keep-alive> 组件为被包裹的组件引入了两个额外的生命周期钩子:activated 和 deactivated。

这两个钩子分别在组件被激活和停用时调用。

下面是这两个钩子的详细信息以及如何使用它们:

1.1. activated 钩子

当一个被 <keep-alive> 缠绕的组件被重新激活时(即从缓存中取出并重新添加到 DOM 中),activated 钩子将会被调用。

这是执行组件初始化工作或更新操作的好时机。

1.2. deactivated 钩子

当一个被 <keep-alive> 缠绕的组件被停用时(即从 DOM 中移除但仍然被缓存),deactivated 钩子将会被调用。

这通常用于释放资源或取消事件监听器等操作。

1.3. 使用示例

下面是一个简单的示例,展示了如何在一个组件中使用 activated 和 deactivated 钩子:

// MyComponent.vue
export default {
  name: 'MyComponent',
  data() {
    return {
      message: 'Hello from MyComponent!'
    };
  },
  activated() {
    console.log('MyComponent activated.');
    // 当组件被激活时做一些事情,如重新获取数据
  },
  deactivated() {
    console.log('MyComponent deactivated.');
    // 当组件被停用时做一些清理工作
  },
  methods: {
    fetchData() {
      // 假设这是一个获取数据的方法
      console.log('Fetching data...');
    }
  }
};

然后在父组件中使用 <keep-alive> 包裹 MyComponent:

<template>
  <div>
    <keep-alive>
      <my-component v-if="showMyComponent" />
    </keep-alive>
    <button @click="toggleComponent">Toggle Component</button>
  </div>
</template>

<script>
import MyComponent from './components/MyComponent.vue';

export default {
  components: {
    MyComponent
  },
  data() {
    return {
      showMyComponent: true
    };
  },
  methods: {
    toggleComponent() {
      this.showMyComponent = !this.showMyComponent;
    }
  }
};
</script>

在这个例子中,当点击按钮时,v-if 将会使 MyComponent 在 DOM 中切换显示和隐藏状态。

当 MyComponent 被隐藏时,它会被 <keep-alive> 缓存起来,并且会调用 deactivated 钩子;当再次显示时,会调用 activated 钩子。

通过这种方式,你可以有效地管理组件的生命周期,特别是在涉及到组件复用和性能优化的情况下。

责任编辑:武晓燕 来源: 前端爱好者
相关推荐

2024-10-07 09:49:14

2023-04-28 08:35:22

Vue 3Vue 2

2022-11-24 13:55:47

React类组件

2022-02-08 08:22:34

HTTP短连接TCP

2021-11-17 08:21:31

HTTP连接数据

2021-10-20 07:18:51

微信小程序函数

2013-08-01 09:40:51

Windows 8.1

2022-04-19 07:20:24

软件开发安全生命周期SSDLC应用安全

2015-07-08 16:28:23

weak生命周期

2010-07-14 10:48:37

Perl线程

2009-06-11 11:28:35

JSF生命周期

2009-11-23 20:25:27

ibmdwSOA

2021-03-30 08:05:39

Vue 3 生命周期Vue2

2023-06-19 08:23:28

kubernetes容器

2011-05-20 17:59:06

回调函数

2019-10-16 10:50:13

Linux内核测试

2013-07-29 05:11:38

iOS开发iOS开发学习类的'生命周期'

2012-01-16 09:00:56

线程

2009-06-17 15:06:50

Hibernate实体

2022-06-29 16:59:21

Vue3Vue2面试
点赞
收藏

51CTO技术栈公众号