import { watch } from 'vue'; watch(()=>window.screen.width,(newVal)=>{ console.log(newVal);

必須使用 window.addEventListener 才有作用

<script setup>
    window.addEventListener('resize',()=>{
        console.log(window.screen.width);
</script>
                    

Q: 我想請問為什麼使用 watch 去監控螢幕縮放,是無效的?
watch 監聽的東西必須是 vue 的 ref/reactive 變數,但 window.screen.width 不是

Q: 必須使用 window.addEventListener 才有作用
你那樣的寫法並不是透過 vue 去監控 window.screen.width,而是使用原生的 resize 偵聽事件。這樣子做無法直接拿到 vue 元件的 <template> 使用

如果你要把 resize 監聽的結果拿到 Vue 使用,你仍然需要宣告一個 ref/reactive 變數來接。
在 onMounted 的時候監聽 resize 事件,並且在 onUnmounted 取消監聽 resize 事件

https://stackblitz.com/edit/vitejs-vite-siwv1z?file=src%2FApp.vue&terminal=dev

題外話,這邊是用樓主問題說的監聽螢幕解析度大小,縮放視窗不會有改變
如果要監聽網頁畫面的大小縮放,而非螢幕解析度的大小縮放,可以用 window.innerWidth 與 window.innerHeight

<template>{{ windowWidth }}, {{ windowHeight }}</template>
<script setup>
import { reactive, ref, onMounted, onUnmounted } from 'vue';
let windowWidth = ref(0);
let windowHeight = ref(0);
function resizeWindow() {
  windowWidth.value = window.screen.width;
  windowHeight.value = window.screen.height;
onMounted(() => {
  window.addEventListener('resize', resizeWindow);
  resizeWindow();
onUnmounted(() => {
  window.removeEventListener('resize', resizeWindow);
</script>