pinia提供的监听方法貌似只能全部监听,没办法监听某个值?

pinia提供的监听方法貌似只能全部监听,没办法监听某个值?

所以我在多个组件中使用监听时就不得不过滤一遍是吗?

这么设计有什么好处吗?比watch差远了不是吗?
还是说我理解错了?

官网案例:

const appStore = useAppStore();
appStore.$subscribe((mutation, state) => {
  // import { MutationType } from 'pinia'
  mutation.type // 'direct' | 'patch object' | 'patch function'
  // 和 cartStore.$id 一样
  mutation.storeId // 'cart'
  // 只有 mutation.type === 'patch object'的情况下才可用
  mutation.payload // 传递给 cartStore.$patch() 的补丁对象。

  mutation.event

  // 每当状态发生变化时,将整个 state 持久化到本地存储。
  localStorage.setItem('cart', JSON.stringify(state))
})

网络的方案:
https://blog.csdn.net/NiHao___/article/details/130126090

// 监听pinia中整个state
store.$subscribe((mutation, state) => {
    console.log(state);
})
// 监听pinia中整个state
watch(store.$state, (newValue, oldValue) => {
    console.log(newValue,oldValue);
})
// 只监听pinia中某一个值的变化
watch(() => store.count, (newValue, oldValue) => {
    console.log(newValue, oldValue);
})
谁设计的新版提问系统?咱们来聊聊吧?
阅读 2.2k
1 个回答

pinia 作为 vue 团队开发的持久化框架,其本身是和 vue 强关联的,简而言之,它 就是为 vue 设计的持久化框架

所以,使用 pinia 就是 结合vue 去使用的,就像题主示例中的代码一样,完全可以使用 watch 去进一步监听,watch 已经足够强大,所以没必要进行冗余的设计,还能便于维护并保持代码一致性

$subscribe 也能满足一般开发场景,如果遇到需要监听 细颗粒度 的场景,那就使用 watch

至于为什么提供 $subscribe 而不是完全使用 watch 进行监听,我认为主要考虑是在 全局处理 这块,watch 是跟 组件绑定 的,而 $subscribe 是跟 pinia 绑定的,如果有个需求是当多组件任一数据发生变化时,将整个 state 存入本地缓存,那么 watch 就不够稳定了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题