electron 多窗口 vuex/pinia 数据状态同步简易方案(利用 LocalStorage)

全局 stroe 添加 mutations 状态同步方法

ts 复制代码
  // 用于其他窗口同步 vuex 中的 DeviceTcpData
  asyncDeviceTcpData(state: StateType, data: any) {
    state.deviceTcpData = data
  },

App.vue 里

ts 复制代码
onMounted(() => {
  console.log("App mounted");
  /**
   * vuex 多窗口 store 同步
   */
   // 1. 初始赋值
  // 从 localStorage 同步 tcp 上报的数据到 vuex
  const deviceTcpData = localStorage.getItem("deviceTcpData");
  if (deviceTcpData) {
    store.commit("asyncDeviceTcpData", JSON.parse(deviceTcpData));
  }
  // 2. 监听 storage 事件 同步 全局 state
  // 其他渲染进程,当设置进程进行修改storage的时候,其他进程可以根据storage变化来更改自己的store
  window.addEventListener("storage", () => {
    const deviceTcpData = localStorage.getItem("deviceTcpData");
    deviceTcpData &&
      store.commit("asyncDeviceTcpData", JSON.parse(deviceTcpData));
  });
  
    // 从主界面关闭时,清空本地存储的数据 (清除 localstorage 的时机)
  window.addEventListener("beforeunload", (e: any) => {
    if (route.name === "search") {
      localStorage.removeItem("deviceTcpData");
    }
  });
});

关键: 利用 watch 监听全局 state 的变动,每次变动,进行 localStorage 同步

ts 复制代码
// 监听 全局 store 的变动
watch(
  () => store.state.deviceTcpData,
  (val) => {
    console.log("watch 触发");
    console.log(val);
    localStorage.setItem("deviceTcpData", JSON.stringify(val));
  },
  {
    deep: true,
  }
);

缺点: 数据量大时,消耗性能较高。可用作少量数据的同步方案;

相关推荐
月走乂山1 天前
DSH 桌面版用 DeepSeek 报 REQUEST_EXTENSION 的根因定位与修复
electron·node.js·插件系统·deepseek·bug排查·dsh·deepseek harness
mont evergreen2 天前
一封从外部世界寄来的信:二维码数据如何穿越三重门,抵达你的屏幕
electron·vue·事件
fellow993 天前
DSH Desktop:把 DeepSeek Harness 变成真正的桌面应用
electron·agent·ai编程·deepseek
CDwenhuohuo3 天前
electron pc项目打包成桌面端
前端·javascript·electron
不可能片场5 天前
命令行中文变问号 我用环境变量救了场
前端·electron
不可能片场5 天前
AI视频口型对齐 用音频驱动说话镜头
前端·electron
Zoom5 天前
【开源】7 天,我用 Rust 复刻了 FinalShell!Rhost v1.0.0 发布
rust·electron·shell
爱丶不疚7 天前
Electron: Sentry 都采集了什么?你知道吗
前端·electron
格数致用7 天前
03- Luckysheet与Vue3+Electron集成实战指南
electron·vue3·luckysheet