Electron主进程渲染进程如何优雅的进行通信

在传统electron使用过程中,我们会发现,主进程和渲染进程之间的通信会感到特别麻烦,不仅要书写很多冗余的代码,而且追溯数据传递时,更是一层一层的去查找,不仅工作量大,后期的维护更是难上加难

那么接下来我将介绍一个适用与electron环境和vite环境的第三方依赖

官网地址:简介 | electron-vite

这个工具库需要项目具备electron和vite的开发环境

如同标题所述,那么怎么实现优雅的通信

首先我们先看传统的electron,怎么做到主进程和渲染进程之间的通信,我们先看渲染进程给主进程发消息(单向通信)

渲染进程某个ts文件

ts 复制代码
const test = () =>{
    window.electronAPI.setTitle('hello world')
}

主进程preload.js

ts 复制代码
const { contextBridge, ipcRenderer } = require('electron/renderer')

contextBridge.exposeInMainWorld('electronAPI', {
  setTitle: (title) => ipcRenderer.send('set-title', title)
})

主进程main.js

ts 复制代码
const { app, BrowserWindow, ipcMain } = require('electron')
const path = require('node:path')

// ...

function handleSetTitle (event, title) {
  const webContents = event.sender
  const win = BrowserWindow.fromWebContents(webContents)
  win.setTitle(title)
}

function createWindow () {
  const mainWindow = new BrowserWindow({
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })
  mainWindow.loadFile('index.html')
}

app.whenReady().then(() => {
  ipcMain.on('set-title', handleSetTitle)
  createWindow()
})
// ...

大家可以看到在渲染进程中,test方法要想将数据传递给主进程,要通过重重关卡,那这时候我们就有疑问了,preload.js 似乎可以省略掉

渲染进程直接将数据抛给main.js,不再通过预加载

那这也是我接下来所讲的,electron+vite,消息的直接传递,没有中间商,我们看展示

渲染进程某个ts文件

ts 复制代码
const test = () =>{
     window.electron.ipcRenderer.send('test', 'hello world')
}

主进程main.ts文件

ts 复制代码
  ipcMain.on('test', (e, data) => {
    console.log(data)
  })

这样一看,确实非常简洁,并且后期的维护,代码调试会非常方便

好了,分享到此结束,如果大家想要了解更多功能,推荐大家去官网查询

相关推荐
林强1811 天前
前端文件预览docx、pptx和xlsx
前端
像是套了虚弱散1 天前
DevEco Studio与Web联合开发:打造鸿蒙混合应用的全景指南
开发语言·前端·华为·harmonyos·鸿蒙
衬衫chenshan1 天前
【CTF】强网杯2025 Web题目writeup
前端
飞翔的佩奇1 天前
【完整源码+数据集+部署教程】【天线&水】舰船战舰检测与分类图像分割系统源码&数据集全套:改进yolo11-repvit
前端·python·yolo·计算机视觉·数据集·yolo11·舰船战舰检测与分类图像分割系统
哆啦A梦15881 天前
点击Top切换数据
前端·javascript·vue.js
程序猿追1 天前
Vue组件化开发
前端·html
艾德金的溪1 天前
redis-7.4.6部署安装
前端·数据库·redis·缓存
小光学长1 天前
基于Vue的2025年哈尔滨亚冬会志愿者管理系统5zqg6m36(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
@PHARAOH1 天前
WHAT - 受控组件和非受控组件
前端·javascript·react.js
生莫甲鲁浪戴1 天前
Android Studio新手开发第二十六天
android·前端·android studio