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,
  }
);

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

相关推荐
mCell3 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron
TrisighT3 天前
Electron鸿蒙PC上写日志文件,我被权限和路径坑了两次
electron·harmonyos
薛定喵的谔5 天前
Term Proxy — 用 Tauri 2 打造跨平台终端配置管理工具
electron·ai编程·全栈
逸铭5 天前
Day 5:三栏布局——左账号 / 中聊天 / 右工具
vue.js·electron
Mahut5 天前
我用 Electron + FFmpeg 做了一个本地视频处理工作站 ClipForge
前端·ffmpeg·electron
逸铭8 天前
Day 2:10 分钟搭 Electron + Vite + Vue 3——AnchorChat 的第一个窗口
electron·客户端
阿里云云原生9 天前
破局 Electron 监控盲区:基于 WASM 与 IPC 桥接的零侵入可观测 SDK 设计
electron
TrisighT10 天前
Electron 跑在鸿蒙 PC 上,单窗口和多窗口内存差 800MB?我抓了 5 组数据
性能优化·electron·harmonyos
怕浪猫14 天前
Electron 开发实战(十六):总结与展望|生态现状、框架对比、行业趋势与学习指南
前端·javascript·electron
古德new14 天前
鸿蒙PC使用electron迁移:Joplin Electron 桌面适配全记录
华为·electron·harmonyos