web-dev-qa-db-ja.com

React.jsでCSVファイルをアップロードして読み取る方法

ユーザーに.csvファイルをアップロードしてから、ブラウザーでそのファイルのデータを解析できるようにします。 ReactJSを使用しています。これはどのように機能しますか?ありがとう。

17
user2593758

理解した。 react-file-reader とHTML5のFileReaderの組み合わせ( this ページを参照)。

レンダリング内にreact-file-readerビットを配置しました:

<ReactFileReader handleFiles={this.handleFiles} fileTypes={'.csv'}>
    <button className='btn'>Upload</button>
</ReactFileReader>

そして、これ。

handleFiles = files => {
    var reader = new FileReader();
    reader.onload = function(e) {
    // Use reader.result
    alert(reader.result)
    }
  reader.readAsText(files[0]);
}
19
user2593758

Papa Parse( https://www.npmjs.com/package/papaparse )を使用します。次に、反応コンポーネントの例を示します。

class FileReader extends React.Component {
  constructor() {
    super();
    this.state = {
      csvfile: undefined
    };
    this.updateData = this.updateData.bind(this);
  }

  handleChange = event => {
    this.setState({
      csvfile: event.target.files[0]
    });
  };

  importCSV = () => {
    const { csvfile } = this.state;
    Papa.parse(csvfile, {
      complete: this.updateData,
      header: true
    });
  };

  updateData(result) {
    var data = result.data;
    console.log(data);
  }

  render() {
    console.log(this.state.csvfile);
    return (
      <div className="App">
        <h2>Import CSV File!</h2>
        <input
          className="csv-input"
          type="file"
          ref={input => {
            this.filesInput = input;
          }}
          name="file"
          placeholder={null}
          onChange={this.handleChange}
        />
        <p />
        <button onClick={this.importCSV}> Upload now!</button>
      </div>
    );
  }
}

export default FileReader;
4
ttfreeman