码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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提供了ipcMain和ipcRenderer两个类进行通信。

    前端发送请求:

    其中 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和后端通信的接口

     

  • 相关阅读:
    土壤养分检测:缺少氮磷钾元素时,作物表现的症状各不相同
    NBI可视化平台快速入门教程(五)编辑器功能操作介绍
    浅析 C# 控制台的 Ctrl+C 是怎么玩的
    不指定时区会踩坑:MySQL Java 驱动升级遇到的 Bug 分析
    企业级前端组件建设
    车道线检测-GANet-CVPR2022论文学习笔记
    Performance Improvements in .NET 8 & 7 & 6 -- String【翻译】
    Nginx详细入门--配置理解,反向代理负载均衡,限流,高可用,防盗链等
    设置Mac上Git的多账户配置,用于同时访问GitLab和Gitee
    Python generator高级方法应用解析
  • 原文地址:https://blog.csdn.net/wanghaoyingand/article/details/125507365
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号