Reactjs 输入上传不 return 本地 URL

Reactjs Input Upload doesn't return local URL

我在将图像上传到服务器之前尝试显示图像预览时遇到问题。我正在使用 reactjs。

我的问题是,当我尝试上传图像时,我得到了文件数据,但是当我使用 reader 时,它没有 return 本地 URL 并且只显示undefined

这是我试图关注的话题

但是当我尝试检查本地图像时 url 它 return undefined

这是我在文件中导入的内容:

import React, {Component} from "react";
import { MDBContainer, MDBRow, MDBCol, MDBBtn, MDBIcon, MDBInput, MDBDropdown, MDBDropdownToggle, MDBDropdownMenu, MDBDropdownItem  } from 'mdbreact';

这是我的 js:

<p className="text-upload">Front Desain</p>
<input ref="file" type="file" name="front Design" onChange={this.frontDesign}/>

这是我的方法或功能:

  frontDesign = (e) =>{
    var file = this.refs.file.files[0];
    var reader = new FileReader();
    var url = reader.readAsDataURL(file);

    reader.onloadend = function (e) {
        this.setState({
          form:{
            frontDesign: [reader.result]
          }
        })
      }.bind(this);
    console.log("Check Data : ", file)
    console.log("Check URL : ", url)

  }

这是我的状态:

  state ={
    form:{
      frontDesign: [],
    }
  }

这是我的控制台:

这是我的代码和框:

https://codesandbox.io/s/tender-mclaren-zb1l7?fontsize=14

有人可以帮我解决这个问题吗?

这里不需要使用ref。试试下面的代码

frontDesign = (e) => {
  var file = e.target.files[0];
  var reader = new FileReader();
  reader.onload = (e) => {
    //Image URL e.target.result
    this.setState({
      form:{
        frontDesign: [e.target.result]
      }
    })
  }
  reader.readAsDataURL(file);
}

From the mozilla website 看来您需要向 reader 添加一个加载事件侦听器。部分IE版本不支持该示例代码

...

reader.addEventListener("load", () => {
  this.setState(state => ({
    ...state,
    form:{
      frontDesign: [reader.result]
    }
  }))
  const url = reader.result;
  console.log(url);
}, false);

...

在这里工作 condeSanbox:https://codesandbox.io/s/affectionate-lamport-dnbij