reactjs - setState 无法处理来自 onClick 侦听器的文件输入
问题描述
我有一个上传组件,可以将图像上传到 firebase。成功后,我想清空文件输入并重新渲染组件,但是似乎我无法重置状态以触发重新渲染。我已经读过,将状态设置为 null 不起作用,所以我尝试了一个虚拟对象,但控制台日志总是给我以前的文件名。
我会感谢重新渲染修复或一些一般性建议如何更好地处理这个问题。
const onFileChange = (e) => {
setFile(e.target.files[0]);
};
const onUpload = async () => {
if (file) {
// do something
setFile({ file: "none" });
console.log(file.name);
}
};
return (
<>
<input type="file" onChange={onFileChange} />
<button onClick={onUpload}>Upload image</button>
</>
);
解决方案
在 React 中重置文件输入字段的一种方法是设置ref
绑定,并根据需要将其值设置为空字符串。在value
React 的文件输入中,prop 是无用的,因为它是不受控制的,因此以这种方式强制重新渲染是徒劳的。
useEffect(()=>{
if (file === "none"){
this.fileInput.value = "";
}
}, [file])
const onUpload = async () => {
if (file) {
// do something
setFile("none");
}
};
<input type="file" onChange={onFileChange} ref={(ref)=>{this.fileInput = ref}} />
CodeSandBox:https ://codesandbox.io/s/boring-mirzakhani-7d16s?file=/src/App.js
推荐阅读
- javascript - Javascript多维数组,数据推送在每一行中添加相同的数据
- javascript - 要求和导入不适用于 Electron 中的模块
- python - 将字符串解析为 Sympy 方程时出现 TypeError
- payment-gateway - 支付成功后Realex支付网关不返回商家网站
- python - 如何绘制学习率与准确性sklearn?
- html - 如何从框架集框架内更改浏览器窗口的 URL?
- r - 如何从 xts zoo 对象矩阵中的每个对象访问 coredata
- sql - 将字符串添加到 IsNull 表达式的末尾
- google-cloud-platform - 使用新的 Google rest api 要求进行验证 (15.01.2019)
- java - Java Kafka adminClient 主题配置。配置值被覆盖