【发布时间】:2019-05-31 01:01:01
【问题描述】:
我的目标只是显示来自我的 Electron 应用程序本地存储的文件中的数据(使用 React)。我在实际读取和处理数据方面已经完成了一半,我只是不知道如何显示它。
这是我的文件读取内容:
export function read() {
let values = [];
fs.readFile(
path.resolve(__dirname, './files/test.txt'),
'utf-8',
(err, data) => {
if (err) throw err;
values = data.toString().split('\n');
const listItems = values.map(val => <p>{val}</p>);
return listItems;
}
);
}
这可以正常工作,并且我已经在控制台记录了所有正确的值。
让我感到困惑的部分是我想展示它的时候。这是我的反应组件:
// @flow
import React, { Component } from 'react';
import styles from './ReadFile.css';
import { read } from '../actions/fileread';
type Props = {};
export default class ReadFile extends Component<Props> {
props: Props;
render() {
const result = read();
return (
<div className={styles.container} data-tid="container">
<p>Read from File</p>
{result}
</div>
);
}
}
我希望这样做是调用read 函数,将其存储在result 中,然后使用{result} 打印结果。相反,它什么也不显示。它也没有给出任何错误。
我感觉这与 react 前端和读取文件的 node.js“后端”之间的一些奇怪的服务器/客户端关系有关。我不确定如何在这两个组件之间创建一个简单的接口来让它们工作。
【问题讨论】:
-
无论服务器/客户端之间的通信如何,您的读取函数实际上都不会返回任何内容。该代码是异步的,因此您需要返回一个 Promise 或将回调传递给 read。此外,不能从 render() 中调用此异步代码,但您需要使用诸如 componentDidMount 之类的东西,使用 setState 将其存储在状态中,然后在渲染中读取状态。