javascript - 新文件阅读器(); react 。遍历项目时

标签 javascript reactjs ecmascript-6

我有一个文件列表,我想为其找到 base64Data 并将其显示在每个文件的列表中。

我已经尝试了以下方法,但它不起作用,我猜主要原因是 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>
}

最佳答案

// You should load data before rendering. You can't use async functions for render

class App extends React.Component {
  constructor(props) {
    super(props);
    
    this.state = {
      bases: [],
    };
  }
  
  async componentDidMount() {
     const {files} = this.props; // Assuming you get files from props
     
     const promises = files.map((blob) => {            
        return new Promise((res) => {
          const reader = new FileReader();
          reader.readAsDataURL(blob);

          reader.onload = (e) => {
            res(e.target.result);
          }        
        });            
     });
     
     const bases = await Promise.all(promises);
     
     this.setState({bases});
  }
  
  render() {
     const {bases} = this.state;
     
     if (bases.length === 0) return 'No data';
     
     
    <ul>
      {bases.map(base64Data) => {
         return <li>{base64Data}</li>;
      }}
    </ul>
  }
}

关于javascript - 新文件阅读器(); react 。遍历项目时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677785/

相关文章:

javascript - 根据值处理 JSON 对象/数组

javascript - 在普通 JS 对象上同时使用 `get` 和 `apply` 代理陷阱

javascript - 如何修复加载时在网页上显示翻译键的 Angular 翻译?

javascript - IndexRoute 子路由

reactjs - 如何使用语义 UI 创建可折叠菜单以进行 react ?

javascript - 如果用户第一次拒绝访问 ReactNative,则请求许可

javascript - Bootstrap tab.js 中的嵌套列表 [事件类未删除]

javascript - TinyMCE - 外部工具栏位置

reactjs - 如何在 React 15 中创建默认为空的受控输入

reactjs - react-router-dom 不起作用