MST

星途 面试题库

面试题:Vue中如何基于Vue Composition API创建一个简单的自定义Hooks用于获取窗口尺寸

请使用Vue Composition API编写一个自定义Hooks,实现获取浏览器窗口的宽度和高度,并在窗口尺寸变化时实时更新。要求给出完整的代码示例,并解释关键代码的作用。
49.5万 热度难度
前端开发Vue

知识考点

AI 面试

面试题答案

一键面试
<template>
  <div>
    <p>Width: {{ width }}</p>
    <p>Height: {{ height }}</p>
  </div>
</template>

<script setup>
import { ref, onMounted, onUnmounted } from 'vue';

const useWindowSize = () => {
  const width = ref(window.innerWidth);
  const height = ref(window.innerHeight);

  const handleResize = () => {
    width.value = window.innerWidth;
    height.value = window.innerHeight;
  };

  onMounted(() => {
    window.addEventListener('resize', handleResize);
  });

  onUnmounted(() => {
    window.removeEventListener('resize', handleResize);
  });

  return {
    width,
    height
  };
};

const { width, height } = useWindowSize();
</script>

关键代码解释

  1. ref(window.innerWidth)ref(window.innerHeight):使用 ref 创建响应式变量 widthheight,并初始化为当前窗口的宽度和高度。
  2. handleResize 函数:在窗口大小变化时,更新 widthheight 的值。
  3. onMounted 钩子:在组件挂载后,添加 resize 事件监听器,当窗口大小变化时调用 handleResize 函数。
  4. onUnmounted 钩子:在组件卸载时,移除 resize 事件监听器,避免内存泄漏。
  5. return { width, height }:返回包含 widthheight 的对象,供组件使用。
  6. const { width, height } = useWindowSize();:解构 useWindowSize 钩子返回的对象,获取 widthheight 变量并在模板中使用。