Uncaught TypeError: this.csvJSON не является функцией в FileReader.reader.onload - PullRequest
0 голосов
/ 10 июля 2019

Я создаю функцию вactjs, которая получает txt-файл и читает, конвертируя в объект json.

Итак, когда мой файл читается, я вызываю функцию csvJSON, но получаю в консоли:

Uncaught TypeError: this.csvJSON не является функцией в FileReader.reader.onload

Что я пробовал:

import React, { Component } from 'react';

export default class FileInput extends Component {

    constructor(){
        super();
        this.openFile = this.openFile.bind(this);
        this.csvJSON = this.csvJSON.bind(this)
    }

    openFile(event){
        let input = event.target;
        let reader = new FileReader();
        reader.onload = function(){
            console.log(reader.result.substring(0, 200));
            this.csvJSON(reader.result)
        };
        reader.readAsText(input.files[0]);
    }

    csvJSON(csv){

        var lines=csv.split("\n");

        var result = [];

        var headers=lines[0].split(";");

        for(var i=1;i<lines.length;i++){

            var obj = {};
            var currentline=lines[i].split(";");

            for(var j=0;j<headers.length;j++){
                obj[headers[j]] = currentline[j];
            }

            result.push(obj);

        }

        //return result; //JavaScript object
        console.log(JSON.stringify(result)); //JSON
    }

    render() {
      return(
        <div>
            <input type='file' accept='text/plain' onChange={this.openFile} />
        </div>
      );
    }
  }

Я такжепопробовал:

openFile(event){
        let input = event.target;
        let reader = new FileReader();
        reader.onload = this.csvJSON(reader.result);
        reader.readAsText(input.files[0]);
    }

Но если я утешу reader.result, моя функция получит ноль.Как я могу передать данные о загрузке читателя в другую функцию?

1 Ответ

0 голосов
/ 10 июля 2019

Вы находитесь внутри функции, поэтому this имеет другое значение, поэтому вам нужно либо связать оператор this в этой функции, либо просто создать переменную

var self = this

, а затемиспользуйте его как:

self.csvJSON(reader.result)

Полагаю также:

openFile(event) {
    let input = event.target;

    let reader = new FileReader();

    reader.onload = () => {
        console.log(reader.result.substring(0, 200));

        this.csvJSON(reader.result)
    };

    reader.readAsText(input.files[0]);
}
...