window.electronAPI.send、on 和 once

在 Electron 中,window.electronAPI.sendononce 是渲染进程与主进程进行 IPC(进程间通信)时常用的方法,它们的区别主要体现在功能用途调用时机上:

1. window.electronAPI.send

  • 作用 :从渲染进程主进程发送消息(单向发送,不需要立即等待回复)。
  • 特点 : - 是主动发送消息的方法,用于触发主进程中对应的事件监听。 - 通常需要配合主进程的 ipcMain.on 来接收消息。
  • 示例
js 复制代码
// 渲染进程中发送消息 
window.electronAPI.send('login-request', { username: 'admin', password: '123' });
主进程中用 `ipcMain.on` 接收:
// 主进程中接收消息 
ipcMain.on('login-request', (event, data) => { console.log('收到登录请求:', data); }); 

2. window.electronAPI.on

  • 作用 :在渲染进程持续监听主进程发送的特定事件(可以多次触发)。
  • 特点
    • 一旦注册,会一直生效,只要主进程发送该事件,渲染进程就会触发回调。
    • 适用于需要多次接收同一类型消息的场景(如实时数据更新)。
    • 示例
js 复制代码
// 渲染进程中持续监听主进程的 'user-info' 事件
window.electronAPI.on('user-info', (userData) => { console.log('收到用户信息:', userData); localStorage.setItem('user', JSON.stringify(userData)); }); 
  • 主进程可以多次发送该事件,渲染进程都会收到。

3. window.electronAPI.once

  • 作用 :在渲染进程只监听一次主进程发送的特定事件(触发一次后自动取消监听)。
  • 特点: 回调函数只会执行一次,后续主进程再发送该事件时,不会再触发。
  • 适用于只需要处理一次的场景(如初始化数据、一次性通知)。
  • 示例
javascript 复制代码
// 渲染进程中只监听一次 'login-success' 事件
window.electronAPI.once('login-success', () => { console.log('登录成功(只提示一次)'); alert('欢迎回来!'); });

即使主进程多次发送 login-success 事件,上面的回调也只会执行一次。

方法 用途 触发次数 适用场景
send 渲染进程向主进程发送消息 主动调用一次 提交数据、触发主进程操作
on 渲染进程持续监听主进程消息 多次(持续生效) 实时更新、重复事件处理
once 渲染进程只监听一次主进程消息 一次(自动取消) 初始化、一次性通知

简单说: send 是"发消息",on 是"一直听",once 是"只听一次"。根据具体的通信需求选择即可。

相关推荐
universe_01几秒前
day25|学习前端js
前端·笔记
Zuckjet5 分钟前
V8 引擎的性能魔法:JSON 序列化的 2 倍速度提升之路
前端·chrome·v8
MrSkye5 分钟前
🔥React 新手必看!useRef 竟然不能触发 onChange?原来是这个原因!
前端·react.js·面试
wayman_he_何大民13 分钟前
初识机器学习算法 - AUM时间序列分析
前端·人工智能
juejin_cn14 分钟前
前端使用模糊搜索fuse.js和拼音搜索pinyin-match提升搜索体验
前端
....49238 分钟前
Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
前端·javascript·vue.js
teeeeeeemo1 小时前
如何做HTTP优化
前端·网络·笔记·网络协议·http
范范之交1 小时前
JavaScript基础语法two
开发语言·前端·javascript
界面开发小八哥2 小时前
DevExtreme Angular UI控件更新:引入全新严格类型配置组件
前端·ui·界面控件·angular.js·devexpress
bitbitDown2 小时前
重构缓存时踩的坑:注释了三行没用的代码却导致白屏
前端·javascript·vue.js