[更新]:在重新加载之前,有几分之一秒的警告 [违规] 'click' 处理程序花了 xx ms 是 showinf。(从录屏中得知)
我正在将 Electron 与 React 一起使用。为了与主进程(电子)和渲染器(反应)进行通信,我使用 ipcRederer 和 ipcMain 模块并使用钩子在网页上加载图像。
ipcMain 模块生成一个 python 进程,并将其结果(图像位置)发送回该进程,然后通过提供位置来加载由 python 脚本创建的图像
简单的数据流是:React -> Hooks -> ipcRender -> ipcMain -> spawn python process -> ipc Main -> ipcRender -> Hooks(useState)
当我执行它时,它会显示图像但立即重新加载网页。深入我发现问题是产生了python进程。那就是重新加载页面。
main.js(电子):
const { ipcMain } = require('electron');
ipcMain.on('synchronous-message', (event, arg) => {
//.................Code to run a Python script...............
var python = require('child_process').spawn('python', ['./public/test.py']);
python.stdout.on('data',function(data){
//send the output of python to React
event.returnValue = (data.toString('utf8'));
});
//.................................
})
app.js(反应):
const { ipcRenderer } = window.require('electron');
function Home(){
const [graph, setGraph] = useState("");
function test(){
setGraph(ipcRenderer.sendSync('synchronous-message', 0));
}
return (<div className="Home">
<div onClick={test}>CLick Me</div>
<div id="graph">
<img src={graph} />
</div>
</div>)
}
图变量包含来自 ipcMain 消息的返回值