我试图将状态变量设置为从文本文件中读入的内容。
每当我尝试在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");
}
}
答案 0 :(得分:3)
可能是因为this
在你的r.onload函数中被重新声明,如果你的文件函数是一个click事件,那么它也可能重新声明它。因此,尝试绑定您的文件和r.onload函数
file: function(evt) {
//...
r.onload = function() {
//...
}.bind(this)
}.bind(this)