【问题标题】:electron-forge with two windows : how to render the second window? electron-react app带有两个窗口的电子锻造:如何渲染第二个窗口?电子反应应用
【发布时间】:2021-04-11 09:28:37
【问题描述】:

我意识到第二个电子浏览器窗口确实打开了,但没有正确呈现。

在 /tools/forge/forge.config.js 我有两个用于两个窗口的入口点:

        entryPoints: [

        {
          // React Hot Module Replacement (HMR)
          rhmr: 'react-hot-loader/patch',
          // HTML index file template
          html: path.join(rootDir, 'src/index.html'),
          // Renderer
          js: path.join(rootDir, 'src/renderer.ts'),
          // Main Window
          name: 'main_window',
          // Preload
          preload: {
            js: path.join(rootDir, 'src/preload.ts'),
          },
        },

        {
          // React Hot Module Replacement (HMR)
          rhmr: 'react-hot-loader/patch',
          // HTML index file template
          html: path.join(rootDir, 'src/index_two.html'),
          // Renderer
          js: path.join(rootDir, 'src/renderer_two.ts'),
          // Main Window
          name: 'main_window2',
          // Preload
          preload: {
            js: path.join(rootDir, 'src/preload.ts'),
          },
        },

      ], 

这是 main.ts 中的相关部分:

declare const MAIN_WINDOW_WEBPACK_ENTRY: string;
declare const MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: string;

let mainWindow;
let mainWindow2;

const createWindow = (): void => {
  mainWindow = new BrowserWindow({

  })
  mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);

  mainWindow2 = new BrowserWindow({

  })

  // Is this correct??
  mainWindow2.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);
}

/src/renderer.ts :

import './app';

/src/renderer_two.ts:

import './app_two'

在 src/app_two/components/App_two.tsx 中:

class App extends React.Component {

  render(): JSX.Element {
    return (
      <div className='container'>
        <h2 className='heading'>
            SECOND WINDOW
        </h2>
        <p>
          <button id="exchange-greetings-with-first-window" onClick={() => {
            exchangeGreetingsFunct();
          }}>Exchange Greetings with First Window</button>
        </p>
      </div>
    );
  }
}

如您所见,右侧的第二个窗口未正确呈现:

如何正确加载第二个窗口的渲染?

【问题讨论】:

    标签: reactjs typescript electron electron-forge


    【解决方案1】:

    在 package.json 文件中的 entryPoints 你好,你应该做这样的事情

    "entryPoints": [
                {
                  "html": "./src/foldera/view.html",
                  "js": "./src/renderer.js",
                  "name": "foldera_window",
                  "preload": {
                    "js": "./src/foldera/preload.js"
                  }
                },
                {
                  "html": "./src/folderb/view.html",
                  "js": "./src/renderer.js",
                  "name": "folderb_window",
                  "preload": {
                    "js": "./src/folderb/preload.js"
                  }
                }
              ]
    

    那么你可以使用

    FOLDERA_WINDOW_PRELOAD_WEBPACK_ENTRY FOLDERA_WINDOW_WEBPACK_ENTRY
    FOLDERB_WINDOW_PRELOAD_WEBPACK_ENTRY FOLDERB_WINDOW_WEBPACK_ENTRY
    

    我认为变量名取决于入口点的名称

    【讨论】:

    • “我认为变量名取决于入口点的名称”它确实如此!这是我的错!
    【解决方案2】:

    在 main.ts 中有这个:

    ipcMain.handle("open-second-window", (IpcMainEvent, message) => {
      //mainWindow2.loadURL(path.join('file://', process.cwd(), 'index-2.html'));
      mainWindow2.loadURL('http://localhost:3000/main_window2'); // corresponding 
           to the main_window2 in /stc/tools/forge/forge.config.js : 
      mainWindow2.show();
    });
    

    我得到了正确的渲染

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2020-06-07
      • 2023-03-16
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2020-02-24
      • 2020-06-14
      相关资源
      最近更新 更多