Javascript 新文件读取器();反应在迭代项时
我有一个文件列表,我想找到其中的base64数据,并将其显示在每个文件的列表中 我尝试了以下方法,但没有成功,我想主要原因是,reader.onload是异步的 我的代码如下所示Javascript 新文件读取器();反应在迭代项时,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我有一个文件列表,我想找到其中的base64数据,并将其显示在每个文件的列表中 我尝试了以下方法,但没有成功,我想主要原因是,reader.onload是异步的 我的代码如下所示 const App = () => { // code.... <ul> {Array.from(files).map(file) => { const reader = new FileReader(); let base64Data; r
const App = () => {
// code....
<ul>
{Array.from(files).map(file) => {
const reader = new FileReader();
let base64Data;
reader.onload = (event: any) => {
// I want to use the result here to display
// the Base64 data string of file
console.log(event.target.result);
base64Data = event.target.result
};
reader.readAsDataURL(file);
return <p>{base64Data}</p>;
}}
</ul>
}
//渲染前应加载数据。不能使用异步函数进行渲染
类应用程序扩展了React.Component{
构造器{
超级作物;
此.state={
基数:[],
};
}
异步组件安装{
const{files}=this.props;//假设您从props获取文件
const promises=files.mapblob=>{
返回新的Promiser=>{
const reader=新文件读取器;
reader.readAsDataURLblob;
reader.onload=e=>{
rese.target.result;
}
};
};
const base=等待承诺。所有承诺;
这个.setState{bases};
}
渲染{
const{bases}=this.state;
如果bases.length==0,则返回“无数据”;
{bases.mapbase64Data=>{
返回{base64Data};
}}
}
}
//渲染前应加载数据。不能使用异步函数进行渲染
类应用程序扩展了React.Component{
构造器{
超级作物;
此.state={
基数:[],
};
}
异步组件安装{
const{files}=this.props;//假设您从props获取文件
const promises=files.mapblob=>{
返回新的Promiser=>{
const reader=新文件读取器;
reader.readAsDataURLblob;
reader.onload=e=>{
rese.target.result;
}
};
};
const base=等待承诺。所有承诺;
这个.setState{bases};
}
渲染{
const{bases}=this.state;
如果bases.length==0,则返回“无数据”;
{bases.mapbase64Data=>{
返回{base64Data};
}}
}
}您不应该在render中执行这样的逻辑,而应该在componentDidMount或更高级别的生命周期方法中执行,例如,在该方法中设置文件列表并将结果设置为状态。在将base64设置为state之前,可以显示加载指示器。另外,使用blob URL比将二进制文件转换为base64更有效,但请记住在卸载时释放URL谢谢@Dominic,这很有意义您不应该在render中执行类似的逻辑,在生命周期方法(如componentDidMount或更高版本)中执行此操作,例如,在其中设置文件列表并将结果设置为状态。在将base64设置为state之前,可以显示加载指示器。另外,使用blob URL比将二进制文件转换为base64更有效,但请记住在卸载时释放URL谢谢@Dominic,这就足够了。好了,很公平。完成。