# IPC 快速参考(3步) ## 步骤1:主进程注册(main.js) **位置:** 在 `electron/main.js` 文件中 **1. 修改导入(第1行):** ```javascript // 第1行,原来:const { app, BrowserWindow } = require('electron') // 改为: const { app, BrowserWindow, ipcMain } = require('electron') ``` **2. 注册 IPC 函数(第138行之前,`app.whenReady()` 之前):** ```javascript // 在第138行(app.whenReady())之前添加,例如第137行: ipcMain.handle('函数名', async (event, 参数) => { return '返回值' }) // 第138行(保持不变): app.whenReady().then(() => { createWindow() // ... 其他代码 }) ``` **具体位置示例:** - 导入修改:第1行 - IPC 函数注册:第137行(在 `app.whenReady()` 之前) **推荐位置:** 放在 `app.whenReady()` 之前,这样应用启动时就能使用。 ## 步骤2:preload 暴露(preload.js) **位置:** 创建新文件 `electron/preload.js`,内容如下: ```javascript const { contextBridge, ipcRenderer } = require('electron') contextBridge.exposeInMainWorld('electronAPI', { 函数名: (参数) => ipcRenderer.invoke('函数名', 参数) }) ``` **然后在 `main.js` 的 `createWindow()` 函数中添加(第115行之后):** ```javascript // 第108行:async function createWindow() { // 第113-116行:webPreferences 部分 webPreferences: { nodeIntegration: false, contextIsolation: true, preload: path.join(__dirname, 'preload.js') // 第116行之后添加这一行 } ``` **具体位置:** - 在 `main.js` 第115行 `contextIsolation: true` 之后 - 添加 `preload: path.join(__dirname, 'preload.js'),` ## 步骤3:前端调用(React) **位置:** 在 React 组件文件中(如 `src/page/xxx.jsx`) ```javascript // 在组件函数内部使用 function MyComponent() { const handleClick = async () => { const result = await window.electronAPI.函数名(参数) console.log(result) } return } ``` ## 记住 - 主进程用 `ipcMain.handle` - preload 用 `ipcRenderer.invoke` - 前端用 `window.electronAPI.函数名` - 都是异步,用 `await`