Electron在react中的进程间的通信

12 篇文章 0 订阅
2 篇文章 0 订阅

在react中使用electron

const {remote, ipcRenderer} = window.require('electron')
//    调用此js文件,引入需要的实例等
export {
  remote,
  ipcRenderer
}

ipcMain

 

从主进程到渲染进程的异步通信。

1.同步 、通过returnValue将此设置为在一个同步消息中返回的值.

    self.ipcMain.on('login', function (event, data) {
            try {
                self.openWallet(data.walletName);
                    ....
                event.returnValue = result;
            } catch (e) {
                event.returnValue = {data: false, errorMsg: e.message};
            }
        });

2.异步、调用event.sender.send来回复异步消息,子进程中需要监听这个login-result事件(需要及时的)移除这个事件监听否则会有许多内存泄漏的情况发生

 self.ipcMain.on('login', function (event, data) {
            try {
                self.openWallet(data.walletName);
                    ...
                event.sender.send('login-result', result);
            } catch (e) {
                event.sender.send('login-result', {data: false, errorMsg: e.message});
            }
        });

ipcRenderer

从渲染器进程到主进程的异步通信

1.异步、需要在监听到result的事件回调时移除事件监听,否则会存在n个此事件的监听,发生n次回调,在此组件被关闭之后,依然会存在,就会发生内存泄漏。有比较简洁的写法,同步。但是要考虑到同步和异步对程序带来的影响先。

 submit = () => {
    this.props.form.validateFields(
      (err) => {
        if (!err) {
          ipcRenderer.send("set-gateway", this.props.form.getFieldsValue())
          ipcRenderer.on("set-gateway-result", this.setGatewayResult);
        }
      },
    );
  }
  setGatewayResult = (event, arg) => {
    errorMsg(arg, () => {message.success('保存成功')})
    ipcRenderer.removeListener("set-gateway-result", this.setGatewayResult)
  }

2.同步

注意: 发送同步消息将会阻塞整个渲染进程,你应该避免使用这种方式 - 除非你知道你在做什么。

以上是官方的提示,个人理解:程序中的阻塞 ==》将通信至于事件链条的最末端,尽量保持此事件的响应速度

就可以忽略此影响了,具体案例具体分析哦

const data = ipcRenderer.sendSync("get-user-wallet");
this.getWallets(data)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值