【发布时间】:2020-07-02 21:01:01
【问题描述】:
我有一个工作代码(Flask + 纯 JS),它实时显示不断增长的日志文件。 我在将其转换为 ReactJS 时遇到问题。
app.py(Flask,工作代码,没问题)
@app.route('/stream')
def stream():
def generate():
fname="/Users/xxx/tmp/log.txt"
with open(fname) as f:
while True:
yield f.read()
sleep(1)
return
app.response_class(generate(), mimetype='text/plain')
app.run()
index.html(纯JS,没问题)
<pre id="output"></pre>
<script>
var output = document.getElementById('output');
var xhr = new XMLHttpRequest();
xhr.open('GET', '');
xhr.send();
setInterval(function() {
output.textContent = xhr.responseText;
}, 1000);
</script>
以下是我尝试将其转换为 React。
在 MyPage.jsx 上,我放置了“显示实时日志”按钮。 当用户单击此按钮时,应弹出模态对话框并显示日志。
文件:MyPage.jsx
import Modal from 'react-bootstrap/Modal'
import { Button } from 'react-bootstrap'
const showLog = (e) => {
render(<ModalLog />, document.getElementById('output'));
}
const MyPage = () => {
return (
<div>
<div id="output"></div>
<button type="button" onClick={showLog}>Show Real Time Log</button>
</div
}
function ModalLog() {
const [show, setShow] = useState(true);
const handleClose = () => setShow(false);
const handleShow = () => setShow(true);
return (
<>
<Modal show={show} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>Real Time Log</Modal.Title>
</Modal.Header>
<Modal.Body> Log file live update goes here </Modal.Body>
<Modal.Footer>
<Button variant="primary" onClick={handleClose}>
Close
</Button>
</Modal.Footer>
</Modal>
</>
);
}
问题:
将当前位于我的 index.html 中的 JS 代码放入 MyPage.jsx 的什么位置?
当我按下“显示实时日志”按钮时,模式仅显示第一次,在我关闭后它不再显示。我明白它是什么,因为调用了 handleClose(),但是如何解决呢?
【问题讨论】: