
electron 多窗口 vuex/pinia 数据状态同步简易方案(利用 LocalStorage)
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue

·
全局 stroe 添加 mutations 状态同步方法
// 用于其他窗口同步 vuex 中的 DeviceTcpData
asyncDeviceTcpData(state: StateType, data: any) {
state.deviceTcpData = data
},
App.vue 里
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 同步
// 监听 全局 store 的变动
watch(
() => store.state.deviceTcpData,
(val) => {
console.log("watch 触发");
console.log(val);
localStorage.setItem("deviceTcpData", JSON.stringify(val));
},
{
deep: true,
}
);
缺点: 数据量大时,消耗性能较高。可用作少量数据的同步方案;




vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:5 个月前 )
9e887079
[skip ci] 4 个月前
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 7 个月前
更多推荐
所有评论(0)