面试题答案
一键面试在Vue的服务端渲染(SSR)场景下,Keep - Alive
组件有以下影响:
生命周期钩子函数变化
-
created
和mounted
钩子:在SSR中,created
钩子函数依然会在组件实例被创建时调用,但mounted
钩子函数在SSR时不会像客户端渲染那样在组件挂载到DOM后调用。因为SSR主要关注的是生成HTML字符串,而非实际的DOM挂载操作。 -
activated
和deactivated
钩子:在SSR场景下,activated
和deactivated
钩子函数在初次渲染时不会被调用。这两个钩子主要用于客户端缓存组件的激活与停用场景。只有当组件在客户端被重新激活或停用(例如通过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
切换激活或停用时,activated
和deactivated
钩子函数才会被调用并打印相应日志。例如:
<template>
<div>
<keep - alive>
<MyComponent />
</keep - alive>
</div>
</template>
当MyComponent
在客户端第一次进入keep - alive
缓存后再次被激活时,activated
钩子函数会被调用,控制台会打印MyComponent activated
;当它从激活状态变为停用状态时,deactivated
钩子函数会被调用,控制台会打印MyComponent deactivated
。