有人可以为我提供一个如何打开 Windows 文件资源管理器以选择/返回文件夹路径的示例吗?我不确定如何使用 Electron 处理节点,尤其是使用电子反应样板。
编辑:试一试后,对话框出现,但在选择一个文件夹后,它不会返回 onClick 函数中的文件路径。请让我知道我还应该做什么。
preload.js
const { contextBridge, ipcRenderer } = require("electron");
contextBridge.exposeInMainWorld("electron", {
ipcRenderer: {
myPing() {
ipcRenderer.send("ipc-example", "ping");
},
on(channel, func) {
const validChannels = ["ipc-example"];
if (validChannels.includes(channel)) {
// Deliberately strip event as it includes `sender`
ipcRenderer.on(channel, (event, ...args) => func(...args));
}
},
once(channel, func) {
const validChannels = ["ipc-example"];
if (validChannels.includes(channel)) {
// Deliberately strip event as it includes `sender`
ipcRenderer.once(channel, (event, ...args) => func(...args));
}
},
async getNewPathOnce(channel, func) {
const validChannels = ["get-path"];
if (validChannels.includes(channel)) {
// Deliberately strip event as it includes `sender`
ipcRenderer.once(channel, (event, ...args) => func(...args));
}
},
async getNewPath() {
// ipcRenderer.send("get-path", "getting path");
return await ipcRenderer.invoke("get-path");
},
},
});
main.ts(重要的部分)
ipcMain.handle("get-path", async () => {
if (mainWindow != null) {
return dialog
.showOpenDialog(mainWindow, {
properties: ["openDirectory"],
})
.then((result) => {
// console.log(result.canceled);
// console.log(result.filePaths[0]);
return result.filePaths[0];
})
.catch((err) => {
console.log(err);
});
}
return "waiting";
});
Login.tsx(重要的部分)
<button
onClick={() =>
window.electron.ipcRenderer
.getNewPath()
.then((result: any) => setPath(result))
}
>
Click
</button>
<p>{path}</p>
});
全球.d.ts
declare let window: Window;
export interface IElectron {
ipcRenderer: {
getNewPathOnce(channel: any, func: any): void;
getNewPath(): any;
};
}
declare global {
interface Window {
electron: IElectron;
process: any;
require: any;
}
}
export {};