在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)