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 是"只听一次"。根据具体的通信需求选择即可。

相关推荐
胡萝卜术13 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人13 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
天疆说13 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢14 小时前
02-从硬件说起WebGL
前端·three.js
kyriewen15 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude
2601_9637713715 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
亿元程序员15 小时前
老板说我的3D箭头游戏用来做试玩太普通了,没人想玩,让我变点花样...
前端
李伟_Li慢慢16 小时前
01-threejs架构原理-课程简介
前端·three.js
_瑞17 小时前
深入理解 iOS 渲染原理
前端·ios
IT_陈寒17 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端