const passFromPicToUpload = (e) =>{
hiddenFileInput.current.click();
console.log("one")
}
const handleProfilePicUpload = (e) =>{
console.log("two")
if(e.target.files[0]){
setImage(e.target.files[0]);
}
}
return (
<div className="profile">
<div className="imageContainer" >
<a href="#" onClick={passFromPicToUpload}>
{
profile.avatarUrl?<Image src={profile.avatarUrl} className="profile__image" /> :<Image src="https://i.stack.imgur.com/l60Hf.png" className="profile__image" />
}
</a>
</div>
<input type="file" ref={hiddenFileInput} onChange={handleProfilePicUpload} style={{display:'none'}} />
</div>
)
所以基本上文件选择窗口正在显示,但在我选择图片后,“handleProfilePicUpload”没有触发。
答案 0 :(得分:1)
您试图通过 onChange
事件模拟 click
。将侦听器更改为 onClick
:
<input onClick={handleProfilePicUpload} .. />
更简洁的解决方案是使用标签:
<input type="file" id="file" style="display:none;">
<label for="file">
<a>Image</a>
</label>
答案 1 :(得分:1)
您可以简单地使用标签:
.hidden {
display: none;
}
<input type="file" name="file" id="my-file" class="hidden">
<label for="my-file">
<img src="https://picsum.photos/200/300" width="100" height="100">
</label>
它的工作原理与 HTML 文件 input
标签的工作原理完全一样。
所以,你可以这样做:
function onFileChange(e) {
setImage(e.target.files)
}
// ...
<label
htmlFor="my-file"
title="Click to choose a file"
>
<img src="https://picsum.photos/200/300" width="100" height="100">
</label>
<input
type="file"
id="my-file"
className="hidden"
onChange={onFileChange}
/>