【问题标题】:How to send events from electron to react components only after all components are ready?只有在所有组件都准备好之后,如何从电子发送事件到反应组件?
【发布时间】:2021-12-17 08:43:18
【问题描述】:

我有一个电子应用程序,我正在尝试将 ReactJs 与它一起使用。我在main.js 中有代码,可以在dom-ready 事件上发送一些数据:

mainWindow.webContents.on('dom-ready', function () {
    dao.getIncomes(function (data) {
        mainWindow.webContents.send('income-data', data);
    });
}

然后我有 React 组件,我正在尝试为此事件设置一个侦听器:

useEffect(() => {
    ipcRenderer.on('income-data', function (event, data) {
        // some code
    });
}, []);

有时,组件仅在事件已发送时才启动此效果。并且侦听器没有收到此数据。

在这种情况下如何正确设置监听器? O 可能我应该稍后在其他事件上发送事件,而不是dom-ready

谢谢。

【问题讨论】:

    标签: javascript reactjs electron use-effect


    【解决方案1】:

    我认为首先你应该告诉电子实际功能正在执行。

    const { ipcMain } = require('electron')
    ipcMain.on('react-effect-executed', (event, arg) => {
      dao.getIncomes(function (data) {
        mainWindow.webContents.send('income-data', data);
      });
    })
    
    useEffect(() => {
        ipcRenderer.send('react-effect-executed', '');
        ipcRenderer.on('income-data', function (event, data) {
            // some code
        });
    }, []);
    

    【讨论】:

    • 是的,这是正确的方式,但我有很多组件和很多事件。因此,在每个想要接收一些数据的组件中,我应该发送一些“即时就绪”事件并在 main.js 中处理它。它很快就会变得太复杂
    • 在我看来,我上面的解决方案只比您问题中的代码多一行。反正electron自己也不知道react的各个组件是什么时候渲染出来的。
    猜你喜欢
    • 2014-12-19
    • 2021-08-24
    • 2020-03-28
    • 1970-01-01
    • 2016-11-27
    • 2021-06-07
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多