(Vue3) 监听 watch、Pinia $subscribe

watch:  适用于组件内部或组合函数中对某些响应式数据进行监听。

场景:监听某个 ref 或 reactive 属性

const count = ref(0);

watch(count, (newVal, oldVal) => {
  console.log('count changed:', newVal);
});

场景:监听多个源

watch([() => firstName.value, () => lastName.value], ([newFirst, newLast]) => {
  console.log('名字变了');
});

$subscribe: 适用于全局状态追踪、日志记录、调试等场景。

场景:监听整个 Store 的变化

store.$subscribe((mutation, state) => {
  console.log('Store 发生了变化', mutation);
});

场景:只监听特定字段

store.$subscribe((mutation, state) => {
  if (mutation.type === 'direct' && 'value' in mutation.payload) {
    console.log('value 被修改为:', mutation.payload.value);
  }
});

小结

  • watch 更轻量、灵活,适合组件内部监听响应式数据。
  • $subscribe 是 Pinia 提供的专门用于监听 Store 状态变化的方法,适合全局状态管理。
  • 如果只是想监听一个组件内的值变化,优先使用 watch;
  • 如果你想统一处理 Store 的更新逻辑(如日志、持久化、事件广播),优先使用 $subscribe。
posted @ 2025-06-05 17:46  yuxiaoliu  阅读(358)  评论(0)    收藏  举报