Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 新文件读取器();反应在迭代项时_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 新文件读取器();反应在迭代项时

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

我有一个文件列表,我想找到其中的base64数据,并将其显示在每个文件的列表中

我尝试了以下方法,但没有成功,我想主要原因是,reader.onload是异步的

我的代码如下所示

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,这就足够了。好了,很公平。完成。