从文件内容设置状态

时间:2016-05-03 04:39:52

标签: javascript reactjs javascript-events state

我试图将状态变量设置为从文本文件中读入的内容。

每当我尝试在r.onload匿名函数中设置我的状态变量时,我得到的错误是没有定义setState()方法。

我猜测是因为JavaScript的词汇范围。

我试过绑定"这个"到了"那个"变量然后将其传递到r.onload anon函数内部并调用that.setState(),但我仍然得到相同的结果。

如何读取r.onload匿名函数,并在读取文件内容后设置我的状态变量?

反应组件:

<input type="file" onChange = {this.file} />

反应方法:

file:  function(evt) {
    //Retrieve the first (and only!) File from the FileList object
    var f = evt.target.files[0]; 

    if (f) {
      var r = new FileReader();
      r.onload = function(e){ 
          var contents = e.target.result;
          this.setState({ text: contents });
          alert(contents);  
      } 
      r.readAsText(f);
      } else{ 
      alert("Failed to load file");
    }
  }

1 个答案:

答案 0 :(得分:3)

可能是因为this在你的r.onload函数中被重新声明,如果你的文件函数是一个click事件,那么它也可能重新声明它。因此,尝试绑定您的文件和r.onload函数

file: function(evt) {
    //...
    r.onload = function() {
    //...
    }.bind(this)
}.bind(this)