在 Electron 中,window.electronAPI.send
、on
和 once
是渲染进程与主进程进行 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
是"只听一次"。根据具体的通信需求选择即可。