我知道这个问题已经问过几次了,但是我遍历了答案,找不到解决我的问题的方法。
我有一个非常基本的类组件,它只是加载一个外部HTML文件并读取其内容,但是由于某种原因,我得到了这个。setState在加载实际的HTML之后就不是一个函数,而且我不知道为什么。
这是我的代码:-
import React from "react";
class ReadHtml extends React.Component {
constructor(props) {
super(props)
this.state = {
innerText: ''
};
this.handleFileSelect = this.handleFileSelect.bind(this);
}
handleFileSelect = (evt) => {
evt.preventDefault();
var file = evt.target.files[0]; // File inputs are an array - get the first element
var reader = new FileReader();
reader.onload = function(e) {
// Render the supplied file
document.getElementById('displayPage').innerHTML = e.target.result;
this.setState({
innerText: e.target.result
});
};
// Read in the HTML file.
reader.readAsText(file);
};
render() {
return (
<div>
Select a file : <input type="file" onChange={(e) => this.handleFileSelect(e)} /><br/><br/>
<div id="displayPage">Display the Html Page here</div>
</div>
)
}
}
export default ReadHtml;
非常感谢您的帮助!
存在范围问题,您可以尝试以下代码。或者您可以bind
该功能。
reader.onload = (e) =>{
// Render the supplied file
document.getElementById('displayPage').innerHTML = e.target.result;
this.setState({
innerText: e.target.result
});
};
您可以尝试通过以下方式更改handleFileSelect
功能:
handleFileSelect = (evt) => {
evt.preventDefault();
var file = evt.target.files[0];
var reader = new FileReader();
reader.onload = (e) => { //CHANGES
document.getElementById('displayPage').innerHTML = e.target.result;
this.setState({
innerText: e.target.result
});
};
// Read in the HTML file.
reader.readAsText(file);
};
基本上,当您创建一个新函数时(这里是reader.onload = function()),this
被绑定到该函数。使用箭头功能,this
保留在您的React Class中