因此,我试图将ipcRenderer导入到一个反应组件中,以便与电子端进行通信。问题是我不能进口电子。我试过了
import { ipcRenderer } from 'electron/renderer'
返回模块电子/渲染器未找到
import { ipcRenderer } from 'electron'
返回fs.existsSync不是一个函数
const renderer = require('electron');
返回fs.existsSync不是一个函数
const renderer = require('electron').ipcRenderer;
返回fs.existsSync不是一个函数
const renderer = window.require('electron');
返回window.require不是一个函数
我不知道该怎么办了,我什么都试过了
发布于 2022-01-06 13:34:59
这样啊,原来是这么回事!他们使用电子反应板编写了一个自定义preload.js脚本,该脚本向呈现的组件公开三个函数:myPing:(只是一个演示,向控制台发送ping消息),并在 ipcRenderer方法上公开on和
import { Component } from 'react';
...
...
class Hello extends Component {
componentDidMount() {
console.log('Mounted!', 'Window', window, 'electronApi', window.electron, 'ipcRenderer', window.electron.ipcRenderer);
window.electron.ipcRenderer.on('ipc-example', (arg) => {
// eslint-disable-next-line no-console
console.log(arg);
});
window.electron.ipcRenderer.myPing();
}
render() {
return (
<div>
...
...
发布于 2022-11-25 06:23:23
我以前也有同样的问题。您不应该直接在渲染器/react组件中导入电子。相反,在您的preload.ts文件中,您可以使用电子反应板进行一些基本配置。
因此,在您的react组件中,您应该使用下面的window.electron.ipcRenderer.on('channel-name', args)
示例
const myEventHandler = () => {
window.electron.ipcRenderer.on('channel-name', (event, data) => {
console.log('data, event', data, event);
});
};
window.electron,这里的电子是preload.ts文件中给出的名称。contextBridge.exposeInMainWorld('electron', {...})
https://stackoverflow.com/questions/70563065
复制相似问题