получить переменную узла для реакции компонента - PullRequest
0 голосов
/ 29 февраля 2020

Я запускаю электронное приложение с 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 не отображает значение stdout (я пытаюсь тоже с логом). Я не понимаю, я что-то упускаю?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Я использую IP C и userRef (неуправляемый компонент) и работает как положено!

0 голосов
/ 29 февраля 2020

Вы не можете сделать это.

React Компоненты отображаются на клиенте. Они абсолютно не взаимодействуют с сервером, если не используется API. Если вы хотите sh регистрировать вещи, просто используйте console.log(...) и смотрите консоль браузера.

Если вы должны регистрировать на стороне сервера, вам нужно будет настроить API, который принимает запрос от клиент и печатает тело запроса на консоли, работающей на сервере. Это можно сделать, используя Express JS:

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/log', (req, res) => {
    console.log("Received log request: ", req.body.message);
    res.status(200);
});

app.listen(3001, () => console.log("API running"));

А затем в вашем компоненте:

function func() {
    fetch('http://localhost:3001', {
        method: 'POST',
        body: { message: 'This will be logged!' }
    });
}

Не проверено, но должно работать

...