【发布时间】:2020-09-15 08:13:28
【问题描述】:
我在反应组件中有两个输入字段 type=file。我必须在每个输入字段中加载一个 json 文件,然后将 JSON 文件数据保存在两个不同的变量中并更新组件的状态。但是当我尝试这样做时,文件的两个数据都保存在同一个状态变量中。
这里是组件
export class comp extends Component {
constructor(props) {
super(props);
this.state = {
uploadFile1:null,
uploadFile2:null
}
this.readFile1 = this.readFile1.bind(this);
this.readFile2 = this.readFile2.bind(this);
}
readFile1(e) {
var file = document.querySelector("#file");
if ( /\.(json)$/i.test(file.files[0].name) === false )
{
alert("Not valid JSON file!");
}
else{
const fileReader = new FileReader();
fileReader.readAsText(e.target.files[0], "UTF-8");
fileReader.onload = e => {
console.log(e.target.result);
var data = JSON.parse(e.target.result);
this.setState({
uploadFile1: data
})
};
}
}
readFile2(e) {
var file = document.querySelector("#file2");
if ( /\.(json)$/i.test(file.files[0].name) === false )
{
alert("Not valid JSON file!");
}
else{
const fileReader = new FileReader();
fileReader.readAsText(e.target.files[0], "UTF-8");
fileReader.onload = e => {
console.log(e.target.result);
var data = JSON.parse(e.target.result);
this.setState({
uploadFile2: data
})
};
}
}
render() {
return (
<div className="wrapper">
<input onChange={this.readFile1} type="file" id="file" className="inputfile"/>
<label htmlFor="file">Browse for files</label>
<input onChange={this.readFile2} type="file" id="file2" className="inputfile"/>
<label htmlFor="file">Browse for files</label>
</div>
)
}
}
有两个函数用于读取两个输入的文件。虽然两个输入字段的 id 不同,但两个文件的数据都在 uploadFile1 中设置。
输入字段的id有问题吗?除了“文件”之外,我无法更改输入文件的 ID。如果我不这样做,就会出现上述问题。
【问题讨论】:
-
<input onChange={this.readFile} type="file" id="file" className="inputfile"/>只是想知道您的 this.readFile 来自哪里?据我所知,它不在组件中。 -
更新了代码。这里是误会了。现在你能告诉我上述问题的解决方案吗?
标签: javascript html css reactjs input