使用electron+react.js,组件不会在生产版本中渲染



嗨,这里是电子和反应的新手。我正在使用antd编写一个NavBar组件,在开发模式下一切都很好,但在生产版本中没有任何渲染,它只是全黑的(我使用了antd深色主题(。任何提示都将不胜感激!

这是我的electron.js文件:

const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const path = require('path');
const url = require('url');
const isDev = require('electron-is-dev');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({width: 900, height: 680 ,webPreferences: {
nodeIntegration: true}});
mainWindow.loadURL(isDev ? 'http://localhost:3000' : `file://${path.join(__dirname, '../build/index.html')}`);
mainWindow.on('closed', () => mainWindow = null);
}
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (mainWindow === null) {
createWindow();
}
});

App.js:

import React from 'react';
import logo from './logo.svg';
import './App.css';
import NavBar from './components/parts/NavBar'
function App() {
console.log();
return (
<div> 
<NavBar />
</div>
);
}
export default App;

Navbar.js:

import React, { Component } from 'react';
import { Layout, Menu, Breadcrumb } from 'antd';
import {
DesktopOutlined,
PieChartOutlined,
FileOutlined,
TeamOutlined,
UserOutlined,
} from '@ant-design/icons';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import Tasks from '../sections/Tasks';
import Dashboard from '../sections/Dashboard';
import Profiles from '../sections/Profiles';
import Utilities from '../sections/Utilities';
import Settings from '../sections/Settings';

const { Header, Content, Footer, Sider } = Layout;
const { SubMenu } = Menu;
const version = "v0.0.1";
class NavBar extends Component {
state = {
collapsed: false,
};
onCollapse = collapsed => {
console.log(collapsed);
this.setState({ collapsed });
};
render() {
return (
<Router>
<Layout style={{ minHeight: '100vh' }}>
<Sider collapsible collapsed={this.state.collapsed} onCollapse={this.onCollapse}>
<div className="logo" />
<div>
<Menu theme="dark" defaultSelectedKeys={['1']} mode="inline">
<Menu.Item key="1">
<PieChartOutlined />
<span>Option 1</span>
<Link to="/" />
</Menu.Item>
<Menu.Item key="2">
<DesktopOutlined />
<span>Option 2</span>
<Link to="/tasks" />
</Menu.Item>
<Menu.Item key="3">
<FileOutlined />
<span>Option 2</span>
<Link to="/profiles" />
</Menu.Item>                        
<Menu.Item key="4">
<FileOutlined />
<span>Option 2</span>
<Link to="/utilities" />
</Menu.Item>
<Menu.Item key="5">
<FileOutlined />
<span>Option 2</span>
<Link to="/settings" />
</Menu.Item>
</Menu>
</div>
</Sider>

<Layout className="site-layout">
<Header className="site-layout-background" style={{ padding: 0 }} />
<Content style={{ margin: '0 16px' }}>
<Route exact path="/" component={Dashboard} />
<Route path="/tasks" component={Tasks} />
<Route path="/profiles" component={Profiles} />
<Route path="/utilities" component={Utilities} />
<Route path="/settings" component={Settings} />
</Content>
<Footer style={{ textAlign: 'center' }}>{version}</Footer>
</Layout>
</Layout>
</Router>
);
}
}
export default NavBar

那些菜单项看起来都一样:

import React, { Component } from 'react';
import { Layout, Menu } from 'antd';
const { Header, Content, Footer, Sider } = Layout;

class Utilities extends Component {
render() {
return (
<div>
<h1>Utilities!!!</h1>
</div>
);
}
}
export default Utilities;

应用程序:

@import '~antd/dist/antd.dark.css';
.App {
text-align: left;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(
<React.StrictMode>
<div>
<App />
</div>
</React.StrictMode>,
document.getElementById('root')
)
;
serviceWorker.unregister();

.webpack.config.js(在我的项目/中,在src/之外(:

// define child rescript
module.exports = config => {
config.target = 'electron-renderer';
return config;
}

.rescriptsrc.js(在我的项目/中,在src/之外(:

module.exports = [require.resolve('./.webpack.config.js')]

我的第一个猜测是,您使用的是webpack,而antd由于配置错误而没有绑定。

您可以使用openDevTools对此进行调试并检查错误消息。

mainWindow.webContents.openDevTools();

你在使用webpack吗?如果你使用了,请发布你的配置文件。

最新更新