【发布时间】:2020-06-13 12:10:03
【问题描述】:
我用https://github.com/electron-react-boilerplate/electron-react-boilerplate 启动一个电子应用程序
我使用来自节点的 child_process,例如:
function func() {
spawn('powershell.exe', ["ls"], (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
log = stdout ;
console.log(`stdout: ${stdout}`);
}
console.error(`stderr: ${stderr}`);
}
);
}
我想将标准输出(或日志)放入一个反应组件(在同一个 js 文件中)
import React, { useState } from 'react';
import Button from '@material-ui/core/Button';
import TextField from '@material-ui/core/TextField';
// node
var spawn = require('child_process').execFile;
var log;
function func() {
spawn('powershell.exe', ["ls"], (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
log = stdout ;
console.log(`stdout: ${stdout}`);
}
console.error(`stderr: ${stderr}`);
}
);
}
function Minimal() {
const [ShowGithubDialog, setShowGithubDialog] = React.useState(null);
const [GitLocalRepo, setGitLocalRepo] = React.useState(null);
return (
<div>
<Button
variant="contained"
color="primary"
// className={classes.button}
onClick={() => {
func();
}}
>
Start
</Button>
<TextField
id="filled-multiline-static"
multiline
fullWidth
rows="15"
defaultValue="Welcome"
variant="outlined"
value={log}
inputProps={{
readOnly: true
}}
/>
</div>
);
}
export default Minimal;
当我单击按钮时,命令有效,我可以在控制台上看到结果,但 Textfield 不显示标准输出值(我也尝试使用日志)。 我不明白,我错过了什么?
【问题讨论】:
-
首先,您忘记解释这两者是如何远程相关的。 React 代码通常在客户端上运行,所以除非你能解释你的组件是如何与 Node 通信的,否则这里显而易见的答案是“两者完全不相关”。这是你在捆绑前做的事情吗?如果是这样,请谈谈您的捆绑是如何工作的。至少,把它变成minimal reproducible example。
-
我更新添加了我启动脚本的方式。这是一个简单的按钮
-
这无济于事:您显示的代码并没有告诉我们这个实际上是如何运行的。浏览器中的 React 不需要 Node 服务器即可在任何地方运行,那么您的 minimal reproducible example 代码的其余部分在哪里?请认真对待这个请求:我们不知道您在做什么或您的代码是什么样的,也不知道您脑海中但不在帖子中的任何其他内容:更新您的帖子以显示它是如何运行的,以及所有内容这与剥离的这个特定问题无关,所以大概这意味着一个非常短的 Node.js 脚本,一个非常短的 React 应用程序,以及如何运行的描述。
-
我更新了完整的最小示例(我希望)
标签: node.js reactjs material-ui textfield child-process