使用pinia遇到的坑

使用pinia遇到的坑

最近在进行vue3的开发中,使用了pinia,在vue文件中引入就是响应式的,确实很好用,但是pinia也有一些缺点,这里分享一些我遇到的和pinia有关的坑以及解决办法。

1.mutation.events是undefined
我将翻页的pageNum和pageSize的值放在了store中,然后,我想监听指定的属性变化,调用后台接口,也就是pageNum和pageSize的值发生变化。
pinia可以通过 store 的 $subscribe() 方法查看状态及其变化,我一看这是pinia提供的,那就用他了,打印出回调的两个参数,发现mutation.events.key这个属性能监听到变化的值。

xxStore.$subscribe((mutation,state)=>{
    console.log(mutation);
    console.log(state);
})

在这里插入图片描述
那么我只需要

xxStore.$subscribe((mutation,state)=>{
    if(mutation.events.key == "pageNum"||mutation.events.key == "pageSize"){
    	//接口调用
    }
})

**但是,这个只在本地调试有用,在打包后,你会发现mutation.events的值是undefined。**所以,如果你想监听指定的state中的值的变化,你是不能使用$subscribe的,你应该使用计算属性:

const pageNum = computed(() => {
    return xxStore.pageNum
})
const pageSize = computed(() => {
    return xxStore.pageSize
})
watch(pageNum, (newValue, oldValue) => {
    //接口调用
});
watch(pageSize, (newValue, oldValue) => {
    //接口调用
});

如何在打包后获取mutation.events.key的值,目前我还没找到这个问题的答案,如果有谁知道,希望评论区告知一下,多谢。

2.非Vue文件中使用无法响应式。
我在进行全局axios封装时,想添加一个全局loading,这样,每次进行http请求时,就会自动触发loading。我之前Vue2的项目,这个事情都交给Vuex去做,这里,我就想当然的交给pinia去做了。
我在app.vue中给router-view套了个spin,把这个spin绑定了一个state,然后在axios封装的js文件中进行修改,但是,在js文件中进行修改,vue文件无法实时监听state的属性变化。我只能放弃这个实现路线。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值