window.electronAPI.send、on 和 once

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

相关推荐
FungLeo1 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构
Lank_M4 小时前
白底都占八成,PNG 为何只在图表页赢过 JPG
前端
张一凡934 小时前
给 Coding Agent 加一道"架构闸门":Jin 是如何做到"先审架构、再写代码、不漂移"的
前端·后端·agent
Linye4 小时前
AI 写的 HTML 原型全是空壳?聊聊真实 DOM 交互避坑
前端·人工智能
ZANE4 小时前
纯前端实现的 PDF 与图片互相转换工具技术实现
前端
Swot5 小时前
SvelteKit Remote Functions 使用指南
前端·后端
Cooper255 小时前
三源热榜去重加 AI 摘要:URL 唯一键踩出的三个坑
前端·python
Yk酱228405 小时前
A2UI探索随笔-技术选型
前端
前端繁华如梦5 小时前
# 从 73000 行压缩代码到 TypeScript 模块化:我把一个 Three.js FPS 游戏 1:1 复刻了一遍
前端
Penge6665 小时前
React Context 详解:从 Props 传递到跨组件状态共享
前端