Vue监听store中数据变化的两种方式

本文对比了Vue中两种数据监听方法:直接使用watch监听store状态变化与通过计算属性结合watch监听store变化的区别。第一种方法适用于简单数据类型及对象类型的数据监听,而第二种方法更适合于简单数据类型的监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式一

watch: {
  "$store.state.userInfo.Name":{
    handler:function(newVal,oldVal){
      console.log(newVal,oldVal);
    }
  }
}

方式二

computed: {
  isEdit () {
    return this.$store.state.userInfo.Name;  //需要监听的数据
  }
},
watch: {
  isEdit(newVal, oldVal) {
    console.log(newVal,oldVal);
  }
},

区别

  • 区别一:第二种方式是先通过计算属性时刻监测store的数据变化,从而触发isEdit的监听函数,明显需要多一步
  • 区别二:如果监听store的数据是一个对象,第一种方式只需要加上深度监听,也可以实现数据的变化监听,而第二种方式却无法监听到store的对象数据变化,例如

第一种方式

watch: {
  //此时我监听的是对象,当$store.state.userInfo.Name发生修改时,此时需要深度监听才能监听到数据变化
  "$store.state.userInfo":{
    deep:true,//深度监听设置为 true
    handler:function(newVal,oldVal){
      console.log("数据发生变化啦"); //修改数据时,能看到输出结果
      console.log(newVal,oldVal);
    }
  }
}

第二种方式

computed: {
  isEdit () {
    return this.$store.state.userInfo;  //需要监听的数据
  },
},
watch: {
  isEdit(newVal, oldVal) {
    console.log("数据发生变化啦"); //修改数据时,看不到该输出结果,因为无法监听到数据的变化
    console.log(newVal,oldVal);
  }
},
### Vue3 中监听 Vuex Store 数据变更方法 在 Vue3 和 Vuex 结合使用的场景下,为了实现对 Vuex store 内部数据变化的有效监控,可以通过 `watch` 或者组合式 API 的方式完成这一需求。 #### 使用 Composition API 方式监听 Vuex State 变化 当采用 Vue3 组合式 API (Composition API) 开发时,可以利用 `setup()` 函数内的逻辑来监听来自 Vuex store 的状态改变。下面是一个具体的例子: ```javascript import { computed, watch } from 'vue'; import { useStore } from 'vuex'; export default { setup() { const store = useStore(); // 创建计算属性获取 state.count const count = computed(() => store.state.count); // 监听 count 属性的变化 watch(count, (newVal, oldVal) => { console.log(`count changed from ${oldVal} to ${newVal}`); }); return { count, }; }, }; ``` 这段代码展示了如何在一个 Vue 组件中使用 `computed` 来访问 Vuex store 的状态,并通过 `watch` 实现对其变动的响应[^1]。 #### 使用 Options API 方式监听 Vuex Getter/State 变化 对于仍然偏好选项式 API (Options API) 的开发者来说,则可以在组件内部直接运用 `this.$store.getters` 获取 getter 计算的结果或是直接读取 `this.$store.state` 下的状态字段来进行监听操作: ```javascript // 在 script 标签下的 methods 或 created 生命周期钩子中执行如下代码 watch( () => this.$store.getters.someGetter || this.$store.state.someProperty, newValue => { console.log('The value has been updated:', newValue); } ); ``` 此片段说明了即使是在传统的选项式 API 环境下也能轻松地监视 Vuex store 中特定路径上的任何更改并做出反应[^5]。 #### 利用 Mutation Events 进行间接监听 除了上述两种主动式的监听手段外,还可以考虑订阅 mutation events 。每当某个 mutation 被触发的时候都会发出事件通知,这样就可以基于这些事件来做进一步的动作处理而不必显式地依赖于具体的状态监测。 ```javascript const unsubscribe = store.subscribe((mutation, state) => { if (mutation.type === 'increment') { console.log('Mutation occurred', mutation.payload); } }); ``` 这里给出了一个简单示例展示怎样注册回调函数以接收每次发生指定类型的 mutation 后的通知消息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值