【发布时间】:2022-04-29 08:31:07
【问题描述】:
我有一个基于electron-react-boilerplate 的电子应用程序。
现在,我已经按照我的意愿运行了一个窗口,我开始创建一个新窗口。
我目前有 2 个 html 文件 - 每个窗口一个 - 包含 div 根:
<div data-root id="main_root"></div><div data-root id="second_root"></div>
我的 index.js 文件是用于渲染 React 应用程序的响应,如下所示:
import React from 'react';
import { render } from 'react-dom';
import { AppContainer } from 'react-hot-loader';
import HomeRoot from './roots/HomeRoot';
import HoverRoot from './roots/HoverRoot';
import { configureStore, history } from './store/configureStore';
const store = configureStore();
const rootMapping = {
main_root: {
name: 'HomeRoot',
Component: HomeRoot,
getNextRoot: () => require('./roots/HomeRoot'),
},
second_root: {
name: 'SecondRoot',
Component: SecondRoot,
getNextRoot: () => require('./roots/SecondRoot'),
},
};
const renderDesiredRoot = () => {
const rootElementID = document.querySelector('[data-root]').id;
const root = rootMapping[rootElementID];
if (!root) throw Error('There is no such Root component!');
const { Component, getNextRoot, name } = root;
render(
<AppContainer>
<Component store={store} history={history} />
</AppContainer>,
document.getElementById(rootElementID),
);
if (module.hot) {
module.hot.accept(`./roots/${name}`, () => {
const NextRoot = getNextRoot();
render(
<AppContainer>
<NextRoot store={store} history={history} />
</AppContainer>,
document.getElementById(rootElementID),
);
});
}
};
renderDesiredRoot();
它的作用是检查哪个 div 根可用,并呈现适当的组件。
我的问题
如何创建将在 BrowserWindow 实例之间共享的商店?我已经研究了 2 个 npm 包(electron-redux 和 redux-electron-store),在这种情况下,它们似乎不是我的解决方案。
【问题讨论】:
-
由于它们是两个不同的窗口,你将无法在它们之间共享 Stores,因为每个窗口都会实例化自己的 Store,每个窗口都是一个单独的进程。
-
@shashi 我实际上找到了
electron-redux的用途。由于我不需要任何操作/reducer 来处理我的主要流程,因此我使用他们在文档中的内容来转发这些操作(他们使用电子的 IPC 功能)并且它工作得非常好:)
标签: javascript reactjs electron