我正在用电子dialog.showMessageBox
打开一些消息框。
但它目前正在打开多个盒子。我想一次只打开一个消息框。
fetch(payload.url)
.then(res => res.json())
.then(data => {
download(BrowserWindow.getFocusedWindow(), data.presigned_url, {
saveAs: true,
// openFolderWhenDone: true,
showBadge: false,
filename: payload.filename
}).then(item => {
const filePath = item.getSavePath();
dialog.showMessageBox(
BrowserWindow.getFocusedWindow(),
{
type: 'info',
title: 'Download Status',
message: 'Download Complete',
buttons: ['Close', 'Open Folder', 'Open'],
},
dialogId => {
switch (dialogId) {
case 0:
break;
case 1:
shell.showItemInFolder(filePath);
break;
case 2:
shell.openItem(filePath);
default:
break;
}
},
);
});
});
例如,我想在新消息框打开时关闭最后一个消息框,或者如果一个消息框已经打开则不允许打开下一个消息框。
任何形式的帮助将不胜感激。
答案 0 :(得分:0)
在我的项目中 我提供了一个state属性,例如isOpenBrowseFileDialog并像一个标志一样使用它。如果启动对话框,则将标志设置为true,这将有助于防止打开许多对话框。
browseFiles = async (e) => {
e.preventDefault();
const ref = this;
const { isOpenBrowseFileDialog } = this.state;
if(isOpenBrowseFileDialog === false) {
this.setState({
isOpenBrowseFileDialog: true
});
remote.dialog.showOpenDialog({
properties: ['openFile', 'multiSelections']
}, async (files) => {
if (files !== undefined) {
await ref.handleFilesAfterAdding(files);
}
ref.setState({
isOpenBrowseFileDialog: false
});
});
}
}