7.electron之渲染线程发送事件,主进程监听事件

如果可以实现记得点赞分享,谢谢老铁~

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和

Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、macOS 和 Linux

的跨平台应用。

1.项目效果, 我的目的是打开一个弹窗,点击按钮打开文件管理器,且只能选中文件夹而不是文件的路径

2.这里要分两个进程说,先说渲染进程,也就是我们的业务逻辑层

index.tsx

js 复制代码
import { Button } from 'antd';
import { useState } from 'react';
import { EllipsisOutlined } from '@ant-design/icons';

export default () => {
  const [inputPath, setInputPath] = useState('')
  const openFileDialog = () => {
    // 发送事件到主进程
    try {
      window.ipcRenderer.send('buttonClicked');
      // 监听主进程回复的选择的文件路径
      window.ipcRenderer.on('selected-file', (event, filePaths) => {
        if (filePaths) {
          setInputPath(filePaths)
        }
      });
    } catch (error) {
      console.log('web网页版不支持获取目录,请在桌面端操作')
    }

  };
  return (
    <div>
    	<Input value={inputPath} style={{ width: '92%' }} readOnly />
       <Button icon={<EllipsisOutlined onClick={openFileDialog} />} />
    <div/>
  );
};

上述代码块中,通过

powershell 复制代码
window.ipcRenderer.send('buttonClicked'); // 自定义事件名发送事件

PS:你肯定有个大大的疑问 window.ipcRenderer 这个哪里来的?这个是
主进程里面的预加载js模块,作用在window全局里了,不懂得请点击 上一篇文章
《6.electron之上下文隔离,预加载JS脚本》

3.现在来说一下 主进程是如何监听事件的

electron.js

js 复制代码
const {
    dialog,
    ipcMain,
} = require("electron");
   // 监听来自渲染进程的事件,这里的 'buttonClicked' 就是渲染进程中的自定义名字。
    ipcMain.on('buttonClicked', (event, arg) => {
        // 在这里处理事件的逻辑
        dialog.showOpenDialog(mainWindow, {
            properties: ['openDirectory'], // openDirectory 代表文件夹
            title: '选择文件夹',
            buttonLabel: '选择',
        }).then(result => {
            if (!result.canceled && result.filePaths.length > 0) {
                const selectedFolder = result.filePaths[0];
                // PS: 发送选择的文件路径给渲染进程
                event.reply('selected-file', selectedFolder);
            }
        }).catch(err => {
            console.error(err);
        });
    });

4.运行以下命令来构建React项目:

powershell 复制代码
npm run build

PS:打开build目录下的index.html文件,发现是一片空白😱,F12一下,发现是资源路径不对。解决方案是在package.json中添加"homepage": "./"。添加之后再进行build,打开index.html,就能看到正常页面了。

5.运行以下命令来启动Electron应用程序:

powershell 复制代码
npm run electron:dev

这将启动Electron应用程序,并加载React应用程序的构建文件。

6.运行以下命令来打包Electron应用程序:

powershell 复制代码
npm run electron:build

收工!谢谢老铁们的点赞收藏~

相关推荐
随风一样自由11 小时前
【前端+跨端技术新格局】Tauri vs Electron 完整性能对比(2026实测数据+底层原理)
前端·javascript·electron
Hyyy20 小时前
每天一个知识点 —— Electron
electron
TrisighT1 天前
Electron 鸿蒙 PC 上点关闭就真退出了?我花了两天才把“最小化到托盘“做稳
electron·harmonyos
TrisighT2 天前
Electron 鸿蒙 PC 上做本地搜索,Fuse.js 比 SQLite 快 6 倍——但我愣是选了最慢的方案
electron·sqlite·harmonyos
薛定谔的猫-菜鸟程序员3 天前
从零构建一个“悬浮式“实时聊天室:Electron + Vue 3 + WebSocket + SQLite 全栈实践
vue.js·websocket·electron
TrisighT3 天前
Electron 鸿蒙 PC 上点外链唤醒应用,我试了 6 种写法只有 1 种能跑
前端·electron·harmonyos
TrisighT3 天前
Electron 跑鸿蒙 PC 上,这 4 个 API 的行为跟 Windows 完全不一样——但文档一行都没写
windows·electron·harmonyos
mCell8 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron
TrisighT8 天前
Electron鸿蒙PC上写日志文件,我被权限和路径坑了两次
electron·harmonyos
薛定喵的谔10 天前
Term Proxy — 用 Tauri 2 打造跨平台终端配置管理工具
electron·ai编程·全栈