• Electron+React如何进行通信


    目录

    前言:

    2.一些理解:

    3.数据交互

    4.前后端交互

    5.一些代码举例:


    前言:

    Electron是使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序

    项目的技术栈为:Electron + React Hooks + typescript


    2.一些理解:

    这个项目分为三层,react(渲染层,前端)electron(中台,可以使用nodejs的一些基本系统功能,接收后端的数据给渲染层,将渲染层的请求给后端)-后端(处理数据,发送接收数据) 

    和正常的前后端分离不一样的是,多出了一个electron,而electron其实就是在react和后端之间的通信桥梁,后端接口先到electron,再通过electron通信给react,反之也是一样

    electron其实是一个桌面应用程序,不是一个标准的前端web程序,所有没有什么请求的发生,控制台network看不到请求,而是只能通过console.log去打印查看,而且通信协议使用的不是http而是gRPC协议


    3.数据交互

    以下三张图截取自Electron官网,在项目中使用非常频繁,且很重要

     

     


    4.前后端交互

     electron提供了ipcMainipcRenderer两个类进行通信。

    前端发送请求:

    其中 channel可以理解为调用的方法名,需要后端对该方法进行监听。

    1. const {ipcRenderer} = window.require('electron')
    2. ipcRenderer.send(channel, data)

    后端接受请求:

    1. const { ipcMain } = electron
    2. ipcMain.on(channel, (event, arg) => {
    3. # do something here
    4. })

    反过来:

    后端发送请求:

    其中mainWindow为项目启动时创建的窗口,如果创建了多个窗口,可以向指定的窗口发送请求。

    mainWindow.webContents.send(channel, data)


    前端监听请求

    1. const {ipcRenderer} = window.require('electron')
    2. ipcRenderer.on(channel, (event, arg) => {
    3. # do something here
    4. })

    5.一些代码举例:

    这是electron的文件用于向react通信,可以看到主要使用的是ipcMain这个对象

    1. const { ipcMain } = require("electron")
    2. module.exports = (win, getClient) => {
    3. ipcMain.handle("QueryYakScript", async (e, params) => {
    4. return await asyncQueryYakScript(params)
    5. })
    6. ipcMain.handle("DeleteYakScriptExecResult", async (e, params) => {
    7. return await asyncDeleteYakScriptExecResult(params)
    8. })
    9. }

     这是react的文件用于和electron通信,可以看到主要使用的是ipcRenderer这个对象,你会发现前后端没有直接交互,而均是通过electron这个“中间人”

    1. ipcRenderer.on(errorChannel, (e: any, error: any) => {
    2. setError(error)
    3. })
    4. ipcRenderer.on(endChannel, (e: any, data: any) => {
    5. info("模块加载完成 / 执行完毕")
    6. setExecuting(false)
    7. updateTasks()
    8. })

    这是electron和后端通信的接口

     

  • 相关阅读:
    Elastcisearch 读书笔记
    Sql优化总结!详细!(2021最新面试必问)
    傲游3浏览器中如何启用JavaScript编程
    Mac安装flutter环境
    天佑药品销售管理系统
    【无标题】
    通过篡改cred结构体实现提权利用
    2023年MBA/MPA/MEM联考笔试答题抓分点
    从 Java 8 升级到 Java 17 全过程,避坑!
    KMP算法代码实现
  • 原文地址:https://blog.csdn.net/wanghaoyingand/article/details/125507365