不完全是。但还有更好的解决方案。
您应该将引导文件与您的反应应用分开。
加载您的应用并从外部传递一些额外参数的引导文件。
在您的情况下,您将创建两个引导文件,一个用于电子 - 带有 memoryHistory(我认为它对电子更好),第二个用于带有浏览器历史记录的浏览器。
electron index-electron.jsx的引导文件示例:
import React from "react";
import ReactDOM from "react-dom";
import { createMemoryHistory } from "react-router";
import App from "./App.jsx";
const initialState = window.__INITIAL_STATE__;
const config = window.__CONFIG__;
const history = createMemoryHistory("begin-path");
ReactDOM.render(
<App
config={config}
history={history}
initialState={initialState}
/>, document.getElementById("root"));
浏览器 index-browser.jsx 的引导文件示例:
import React from "react";
import ReactDOM from "react-dom";
import { browserHistory } from 'react-router';
import App from "./App.jsx";
const initialState = window.__INITIAL_STATE__;
const config = window.__CONFIG__;
ReactDOM.render(
<App
config={config}
history={history}
initialState={initialState}
/>, document.getElementById("root"));
在我的示例中,差异很小(仅历史记录),但您可以进行更多更改。如您所见,我还从外部提供了额外的开始参数(initialState,config);
以及您的应用应该如何:
import React from 'react';
import { Router, Route } from 'react-router';
class App extends React.Component {
static propsTypes = {
history: React.PropTypes.object,
config: React.PropTypes.object,
initialState: React.PropTypes.object
};
render() {
return (
<Router history={this.props.history}>
<Route ...>
...
</Route>
</Router>
);
}
}
export default App;
以上代码只是概念。它来自我的项目,在那里我删除了过时的东西。因此,如果不进行一些修改,它可能无法正常工作
现在对于 electron,您使用 index-electron.jsx,对于浏览器使用 index-browser.jsx。您的大部分代码都可以跨两个环境重用。而且非常灵活。