-1

有人可以为我提供一个如何打开 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.t​​s

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 {};
4

0 回答 0