【问题标题】:how to communicate between react and electron如何在反应和电子之间进行通信
【发布时间】:2020-04-28 01:37:40
【问题描述】:

使用 react 和电子创建桌面应用程序。我想从 react 组件调用电子的 main.js 中的方法。在角度有一个 npm 包。

import React, { useState, useEffect, useRef } from 'react';
import './diagnosis.css';
const electron = window.require('electron');// if i use require('electron') throws error
function Diagnosis(props) {
    const [data, setData] = useState({ hits: [] });
    useEffect(() => {
        getExeFiles();
    });
    const getExeFiles = () => {
        electron.ipcRenderer.send('get-exe'); 
    }
    return(<></>)
}

main.js

electron.ipcMain.on('get-exe', () => {
    console.log('reaciovg');
    mainWindow.webContents.send('return-exe', '');
});

如何解决这个问题?

【问题讨论】:

  • 在您的主进程中,reaciovg 字符串是否正确显示?
  • 它只是一个控制台(检查是否触发了偶数)。

标签: javascript reactjs electron


【解决方案1】:

在你的 Renderer.js

const { ipcRenderer } = require('electron');

async function runCommand(cmd) {
  const res = await ipcRenderer.sendSync('runCommand', cmd);
  return res;
}

在你的 main.js

// Listen event through runCommand channel
// And return the result to Renderer.
ipcMain.on('runCommand', async (event, arg) => {
  event.returnValue = await runCommand(arg);
});

这是主进程和渲染器进程之间最简单的通信方式。

但我认为您将使用 mainWindow.webContents.send('return-exe', ''); 将结果从主进程发送到渲染器

这意味着,您通过return-exe IPC 通道将结果从主通道发送到渲染器。你应该在你的渲染器上监听这个频道的事件。像这样

ipcRenderer.on('retrun-exe', (event, arg) => {
    ...
});

您可以在生命周期函数中添加此侦听器。我习惯将此添加到componentDidMount() 但在您的情况下,请将其添加到您的useEffect()

【讨论】:

  • UI 没有正确渲染..它触发了事件
  • 如何在反应中监听主进程到渲染器事件。为什么 ui 一半渲染。
  • @Krazy 使用你的要求检查这个答案stackoverflow.com/questions/59533379/…
  • 简单直接使用require。您应该在创建 browserWindow 时启用 nodeIntegration 标志为 true
  • @Krazy。 为什么 ui 一半呈现 你是什么意思
猜你喜欢
  • 2016-08-13
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多