MST
星途 面试题库

面试题:Vue中Keep - Alive在服务端渲染(SSR)里中等难度相关问题

在Vue的服务端渲染(SSR)场景下,使用Vue Keep - Alive组件时,对组件生命周期钩子函数有什么影响?请举例说明。
49.9万 热度难度
前端开发Vue

知识考点

AI 面试

面试题答案

一键面试

在Vue的服务端渲染(SSR)场景下,Keep - Alive组件有以下影响:

生命周期钩子函数变化

  1. createdmounted钩子:在SSR中,created钩子函数依然会在组件实例被创建时调用,但mounted钩子函数在SSR时不会像客户端渲染那样在组件挂载到DOM后调用。因为SSR主要关注的是生成HTML字符串,而非实际的DOM挂载操作。

  2. activateddeactivated钩子:在SSR场景下,activateddeactivated钩子函数在初次渲染时不会被调用。这两个钩子主要用于客户端缓存组件的激活与停用场景。只有当组件在客户端被重新激活或停用(例如通过keep - alive切换)时,这两个钩子才会被触发。

举例说明

假设我们有一个简单的组件MyComponent

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Initial message'
    }
  },
  created() {
    console.log('MyComponent created');
  },
  mounted() {
    console.log('MyComponent mounted');
  },
  activated() {
    console.log('MyComponent activated');
  },
  deactivated() {
    console.log('MyComponent deactivated');
  }
}
</script>

在SSR场景下,created钩子函数会在服务端渲染组件实例时被调用并打印日志。而mounted钩子函数不会被调用,因为不存在实际的DOM挂载。当该组件在客户端通过keep - alive切换激活或停用时,activateddeactivated钩子函数才会被调用并打印相应日志。例如:

<template>
  <div>
    <keep - alive>
      <MyComponent />
    </keep - alive>
  </div>
</template>

MyComponent在客户端第一次进入keep - alive缓存后再次被激活时,activated钩子函数会被调用,控制台会打印MyComponent activated;当它从激活状态变为停用状态时,deactivated钩子函数会被调用,控制台会打印MyComponent deactivated