javascript - FileReader onLoad 未触发
问题描述
我有一个简单的反应组件,这是组件的要点:
<input ref={inputRef} type="file" hidden onChange={imageSelected} />
<Button
onClick={() => inputRef.current.click()}
icon="upload"
size="big"
style={{ margin: 0, marginRight: "2px" }}
fluid
color="green"
/>
这是 onChange 函数:
const imageSelected = (ev) => {
if (ev.target.files && ev.target.files[0]) {
const reader = new FileReader();
reader.onload = (e) => {
console.log(e.target.result);
};
}
};
我没有得到任何输出到控制台,onload 没有触发,因为,这是为什么呢?
解决方案
你不告诉它读什么。我假设它是命名中的图像,因此您将使用 readAsDataURL
const imageSelected = (ev) => {
const file = ev.target.files && ev.target.files[0];
if (file) {
const reader = new FileReader();
reader.addEventListener("load", function () {
cosole.log(reader.result);
}, false);
reader.readAsDataURL(file);
}
}
运行示例
const inp = document.querySelector('[type="file"]');
const img = document.querySelector('img');
const imageSelected = (ev) => {
const file = ev.target.files && ev.target.files[0];
if (file) {
const reader = new FileReader();
reader.addEventListener("load", function () {
img.src = reader.result;
}, false);
reader.readAsDataURL(file);
}
}
inp.addEventListener("change", imageSelected);
<input type="file">
<img >
推荐阅读
- typescript - 如何返回与传递给 Typescript 函数的类型相同的类型?
- jquery - jquery 过滤器:多个条件和操作
- ios - 如何访问结构内的 var 以计算 var 数组中列出的项目数?
- php - 提交时,不重定向到操作页面 PHP
- cordova - Android 29 中的内核-ranchu
- php - 网站的每个用户是否共享相同的变量,或者每个用户都是唯一的(即使他们的名称相同)
- objective-c - Objective C (iOS):即使视图发生变化,如何保留变量值?
- javascript - 降低矩阵排序的运行时复杂性
- cakephp-3.x - Cakephp 包管理器(安装程序设置,如 wordpress 和 joomla)框架
- reactjs - 如何更改语义 UI 反应中的背景颜色?