javascript - 使用 FileUploader 动态添加 ImagePreview
问题描述
背景:
我正在创建一个用户个人资料表单,用户可以在其中添加地点。当用户单击“添加”或“删除”按钮时,会动态添加或删除这些位置。每个 Place 都有一个PlaceName
, FileUploader
, 一个img
显示所选文件的标签和一个Delete Button
用于删除该 Place 的标签。
目标:
我想做的是,当用户选择图像时,它应该显示在关联的img
标签中。
当前工作:
我有一个状态变量ImagePreview
,它是一个数组,它将包含上传的文件和placeNameCounter
指示添加了多少个地方的变量,这是为了让每个input
(文件上传者)都有一个唯一的 id,所以第一个有customFile0
第二个一个会拥有customFile1
等等。每个都有一个onChange
监听器来更改状态变量ImagePreview
,以便img
可以设置标签。
const GuideProfileForm = () => {
let placeNameCounter = 0; //will convert this into state variable currently facing some issue
const [ImagePreview, setImagePreview] = useState([]);
const onImageChange = e => {
setImagePreview([
...ImagePreview,
{
[e.target.id]: URL.createObjectURL(e.target.files[0])
}
]);
}
};
input
和img
标签_
<input
type="file"
className="custom-file-input "
id={"customFile" + placeNameCounter} //this is actually passed as props in the acutal code
onChange={e => onImageChange(e)}
/>;
<img
className="GuidePlaceImage"
src={
ImagePreview[placeNameCounter] &&
ImagePreview[placeNameCounter]["counterFile" + placeNameCounter]
}
/>;
CodeSandbox here (我解决了这个问题,文件上传器之前没有工作)
任何帮助将不胜感激
解决方案
我认为既然setImagePreview
是异步的,我们在方法中没有可用的事件。一个简单的修复可能是事先保存密钥,例如:
const key = e.target.id;
推荐阅读
- apache-spark - Kubernetes 集群上的 spark-submit
- html - HTML CSS 放置点 带有链接图像内容的动画幻灯片
- excel - 尝试将 Excel 宏转换为独立的 VBScript
- r - 如何将前一行的信息复制到R中的空白行中
- javascript - JQuery Replace Span by Div
- django - 没有为详细信息和列表视图调用 Django Rest Framework 权限
- css - 删除 UL LI 上的子弹问题
- javascript - 是的,formik验证不断从有效变为无效
- amazon-cloudwatch - AWS CloudWatch 统一代理日志保留
- visual-c++ - #undef 似乎对宏重新定义没有影响(警告 C4005)