網站首頁 編程語言 正文
1.前言:
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
可以理解為調用的方法名,需要后端對該方法進行監聽。
const {ipcRenderer} = window.require('electron') ipcRenderer.send(channel, data)
后端接受請求:
const { ipcMain } = electron ipcMain.on(channel, (event, arg) => { # do something here })
反過來:
后端發送請求:
其中mainWindow為項目啟動時創建的窗口,如果創建了多個窗口,可以向指定的窗口發送請求。
mainWindow.webContents.send(channel, data)
前端監聽請求
const {ipcRenderer} = window.require('electron') ipcRenderer.on(channel, (event, arg) => { # do something here })
5.一些代碼舉例:
這是electron的文件用于向react通信,可以看到主要使用的是ipcMain這個對象
const { ipcMain } = require("electron") module.exports = (win, getClient) => { ipcMain.handle("QueryYakScript", async (e, params) => { return await asyncQueryYakScript(params) }) ipcMain.handle("DeleteYakScriptExecResult", async (e, params) => { return await asyncDeleteYakScriptExecResult(params) }) }
?這是react的文件用于和electron通信,可以看到主要使用的是ipcRenderer這個對象,你會發現前后端沒有直接交互,而均是通過electron這個“中間人”
ipcRenderer.on(errorChannel, (e: any, error: any) => { setError(error) }) ipcRenderer.on(endChannel, (e: any, data: any) => { info("模塊加載完成 / 執行完畢") setExecuting(false) updateTasks() })
這是electron和后端通信的接口
原文鏈接:https://blog.csdn.net/wanghaoyingand/article/details/125507365
相關推薦
- 2022-04-01 FastDFS服務不能上傳文件 報錯:fileutil.MyException: getStoreS
- 2022-11-18 詳解Rust中三種循環(loop,while,for)的使用_Rust語言
- 2022-06-22 C++內存管理詳解使用方式_C 語言
- 2022-08-18 Kotlin函數使用示例教程_Android
- 2022-07-28 Python常用Web框架Django、Flask與Tornado介紹_python
- 2023-07-31 el-tree默認展開或折疊,全選或全不選
- 2022-12-15 一文搞懂C語言中的文件操作_C 語言
- 2022-11-14 mq消息積壓怎么對應
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支