【发布时间】:2020-04-17 13:50:05
【问题描述】:
我正在 React 中创建一个多部分表单。除文件输入字段外,一切正常。
下面是代码,我正在尝试做的事情。
<div className="col-lg-6 col-md-12">
<form encType="multipart/form-data" onSubmit={this.onSubmit}>
<div className="form-group">
<div className="custom-file mb-3">
<input
type="file"
className="custom-file-input"
id="gerberFile"
onChange={this.handleFileChange}
/>
<label className="custom-file-label">
{gerberFileLabel}
</label>
</div>
{errors.gerberFile && (
<div className="alert alert-danger">
{errors.gerberFile}
</div>
)}
</div>
</div>
</div>
handleFileChange = e => {
const file = e.target.files[0];
if (!(file.name.includes(".zip") || file.name.includes(".rar"))) {
const errors = { ...this.state.errors };
errors.gerberFile = "Gerberfiles are only allowed in .zip or .rar";
this.setState({ errors });
} else {
console.log(`file ? ${JSON.stringify(file)}`);
const formFields = { ...this.state.formFields };
formFields.gerberFile = file;
this.setState({ formFields });
this.setState({ gerberFileLabel: file.name });
}
}
奇怪的部分是我能够 console.log 文件名并将其用作标签占位符。但是,每当我尝试 console.log File 对象时,我都会得到一个空的 {} 对象。
我到底做错了什么?我经历了多个教程,每个人似乎都在做同样的事情,老实说,我在 SO 上找不到它。
如果有人能帮助我,我将不胜感激。
【问题讨论】:
-
如果在文件输入中添加
name="file"属性会发生什么? -
我认为您在此处遇到了与此类似的情况:stackoverflow.com/questions/60544186/… 您正在尝试以异步方式将某些内容保存在状态中,并且当您这样做时,JavaScript 已经使数据无效事件参数。
-
@TheDarkIn1978 什么都没有,我什至尝试给出与我的 id 非常相似的名称,但没有观察到任何影响。
-
@Enchew 我可以看到你的评论在某种程度上确实有道理,但是这个
onChange={e =>console.log(file: ${JSON.stringify(e.target.files[0])}@987654327 怎么样@它仍在记录一个空对象 -
顺便说一句,这是我在我的上下文中找到的最接近的,@Enchew 与您的答案非常相似:stackoverflow.com/questions/47442839/… 但是,我的问题与此有点不同。
标签: reactjs forms react-redux multipartform-data multipart