You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue/Vuex中如何深度监听mapState映射的state对象的内部属性

选项式API实现

方法1:精准监听嵌套属性(优先推荐)

直接在watch中写属性路径字符串,不需要开启深度监听,只有isActive变化时才会触发回调,性能最优:

export default {
  computed: {
    ...mapState('data/story', {
      fullStories: 'stories',
    })
  },
  watch: {
    'fullStories.isActive'(newVal, oldVal) {
      // 此处编写属性变化后的业务逻辑
      console.log('isActive更新为:', newVal)
    }
  }
}

如果需要组件初始化时就触发一次回调,可以添加immediate配置:

watch: {
  'fullStories.isActive': {
    handler(newVal) {
      // 业务逻辑
    },
    immediate: true
  }
}

方法2:开启深度监听整个对象

如果需要同时监听fullStories下多个属性的变化,可以开启深度监听:

export default {
  computed: {
    ...mapState('data/story', {
      fullStories: 'stories',
    })
  },
  watch: {
    fullStories: {
      handler(newVal) {
        console.log('isActive最新值:', newVal.isActive)
        // 业务逻辑
      },
      deep: true, // 开启深度监听,对象内部任意属性变化都会触发回调
      // immediate: true 按需添加,初始化触发回调
    }
  }
}

组合式API实现(Vue3 / Vue2 安装composition-api插件场景)

在setup中通过返回目标属性的函数来精准监听:

import { computed, watch } from 'vue'
import { useStore } from 'vuex'

export default {
  setup() {
    const store = useStore()
    const fullStories = computed(() => store.state['data/story'].stories)

    // 监听isActive变化
    watch(() => fullStories.value.isActive, (newVal, oldVal) => {
      // 业务逻辑
      console.log('isActive更新为:', newVal)
    }, {
      // immediate: true 按需添加
    })

    return {
      fullStories
    }
  }
}

如果是<script setup>语法糖写法逻辑完全一致,不需要写return语句即可在模板中使用变量。

内容的提问来源于stack exchange,提问作者user15909643

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:57:03