vue3 pinia 初次赋值 state 时如何禁用 subscribe ?

场景是这样:有一个 store,初始化时需要从服务端加载数据。用户在网页操作期间,state 产生变化了,需要再保存会服务端。但是初次加载时就会触发 subscribe,如何禁用呢?

这是代码现场:
https://codesandbox.io/s/exciting-ganguly-id62o9?file=/src/Ap...

我也把关键的几处代码罗列出来。

通过 subscribe 观察 store 的变化,并执行保存服务端的逻辑

// 订阅每次变化,保存至服务端。这里简化操作了,把变更记录直观显示出来
useCounter.$subscribe((mutation, state) => {
  log.value += "<hr>" + JSON.stringify(mutation);
});

通过 load 方法把从服务端获取的数据,保存至 store

// store 中初次加载数据,这里简化只加载一个
const load = (c) => {
    count.value = c;
};

或者说是不是有更好的实现办法呢?如果我讲的不清楚,可以再补充说明。

阅读 2.4k
1 个回答

可以加一个flag, 初始化时默认为false, 初始触发subscribe, 改一下状态就行:

// 订阅每次变化,保存至服务端。这里简化操作了,把变更记录直观显示出来
useCounter.$subscribe((mutation, state) => {
    if(!flag) {
        flag = true
        return
    }
  log.value += "<hr>" + JSON.stringify(mutation);
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题