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

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

相关推荐
web打印社区1 天前
网页静默打印热敏小票:从 HTML 到出纸的完整指南
前端·javascript·vue.js·electron·pdf·html
ardss1 天前
ZCode 崩了,项目列表全丢:我从 69MB 日志里把数据一条条挖了出来
electron
「、皓子~3 天前
海狸IM 2.1 正式发布
flutter·微服务·golang·electron·开源软件·im·海狸im
明月_清风5 天前
🖥️ Electron 三进程 Host 实战:从架构设计到生产落地的完整指南
前端·electron·客户端
JienDa5 天前
我做了一款不依赖 AI 的离线传统术数排盘工具:Electron、Vue3 与 Java 17 的完整实践
java·人工智能·electron
晴天165 天前
多个 VS Code 项目会导致 Chrome 和 Electron 应用一起卡住?-Day30
前端·chrome·electron
刘广睿6 天前
独立开发桌面素材工作台的技术复盘:内置浏览器、下载队列与本地素材库
系统架构·electron·桌面应用·素材管理
爱丶不疚6 天前
BrowserWindow:你的Electron 应用可以不用手写红绿灯
前端·electron
楠楠子呀7 天前
号码验证技术解析:从原理到实践
运维·人工智能·ai·electron·自动化
坚定信念,勇往无前7 天前
electron打包mac ,apple m4出错:ffprobe是x86,不是arm64
前端·javascript·electron