如何显示使用Electron和React从文件中读取的数据?

时间:2019-05-30 15:23:56

标签: node.js reactjs electron

我的目标只是显示与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;
    }
  );
}

这正常工作,并且我已在控制台上记录了所有正确的值。

让我感到困惑的部分是当我想要显示它时。这是我的react组件:

// @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“后端”之间的某些奇怪的服务器/客户端关系有关。我不确定如何在这两个组件之间创建一个简单的接口来使它们工作。

1 个答案:

答案 0 :(得分:1)

如我的评论中所述,您的代码是异步的,并且您的read()方法未返回任何内容。您应该接近以下内容:

export default class ReadFile extends Component<Props> {
  props: Props;
  constructor(props) {
    super(props);
    this.state = {};
  }
  componentDidMount() {
    read((result) => {
      this.setState({
        result,
      });
    });
  }

  render() {
    return (
      <div className={styles.container} data-tid="container">
        <p>Read from File</p>
        {this.state.result}
      </div>
    );
  }
}

对于read()来说:

export function read(callback) {
  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 callback(listItems);
    }
  );
}