主进程使用BrowserWindow 创建实例
主进程销毁后,对应的渲染进程会被终止
主进程与渲染进程通过IPC方式(事件驱动)进行通信
port的传输,port是在一端创建,是需要把话筒给另一端
${eventName}
, args)${eventName}
, ‘*’, [channel.port2]);大概是全网最详细的Electron ipc 讲解(三)——定情信物传声筒port
electron Js中MessagePorts的实际用途是什么?
npm config set registry https://registry.npm.taobao.org/
npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/
mkdir my-electron-app && cd my-electron-app
npm init
npm install --save-dev electron
git clone --depth 1 --branch main https://github.com/electron-react-boilerplate/electron-react-boilerplate.git your-project-name
npm install
npm start
npm install electron-store
主进程代码更改
//src\main\preload.ts
import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';
export type Channels = 'ipc-example';
//将store挂载到window.electron下,待渲染进程调用
contextBridge.exposeInMainWorld('electron', {
store: {
get(key) {
return ipcRenderer.sendSync('electron-store-get', key);
},
set(property, val) {
ipcRenderer.send('electron-store-set', property, val);
},
// Other method you want to add like has(), reset(), etc.
},
});
//src\main\main.ts
import Store from 'electron-store';
const store = new Store();
// IPC listener
ipcMain.on('electron-store-get', async (event, val) => {
event.returnValue = store.get(val);
});
ipcMain.on('electron-store-set', async (event, key, val) => {
store.set(key, val);
});
渲染进程代码更改
//src\renderer\App.tsx
return (
<div>
<button
onClick={() => {
window.electron.store.set('foo', 'bar');
// or
console.log(window.electron.store.get('foo'));
}}
>
Click Me!
</button>
);
//src\renderer\preload.d.ts ts声明
declare global {
interface Window {
electron: {
store: {
get: (key: string) => any;
set: (key: string, val: any) => void;
// any other methods you've defined...
},
}
}
}
//src\main\main.ts
mainWindow = new BrowserWindow({...});
mainWindow.on('ready-to-show', () => {
//用 webContents.send 发送
mainWindow.webContents.send('toRender', mainWindow.id);
});
//src\renderer\index.tsx
window.electron.ipcRenderer.on('toRender', (id)=>{
console.log('render get', id)
});
ncu
tsconfig : noImplicitAny
用户有第三方的账号,直接通过第三方扫描登陆,实现两种方式:
生成扫码图片的时候,带上系统用户的参数+唯一标识;轮询后端是否已登录
由于没有实际操作过,只能一句话理解附上。
electron官方文档
正确设置 ELECTRON_MIRROR ,加速下载 electron 预编译文件
electron-react-boilerplate官方文档