Как загрузить изображение в качестве поля ввода в ReactJS?

#javascript #reactjs #state

#javascript #reactjs #состояние

Вопрос:

Есть несколько полей ввода в виде текста / целого числа / даты … и изображения, все работает просто отлично, выбор файла плавный, но загрузка его в базу данных выдает ошибку, которая гласит:

  TypeError: _this.state.selectedFile is null


// ************Pets
>
onSubmit = evt => {
    evt.preventDefault();
    const {
      name ``
      `
  

Вот код (ошибка, скорее всего, связана с состоянием):

 const endpoint = "http://localhost:8000/upload";

class Pets extends Component {
state = {
// error_message: "",
pets_list: [],
selectedFile: null,
loaded: 0
 };

//For image upload with Loading bar

 handleSelectedFile = event => {
 this.setState({
  selectedFile: event.target.files[0],
  loaded: 0
   });
  };
  handleUpload = () => {
   const data = new FormData();
    data.append("file", this.state.selectedFile,       
   this.state.selectedFile.name);
   axios
  .post(endpoint, data, {
    onUploadProgress: ProgressEvent => {
      this.setState({
        loaded: (ProgressEvent.loaded / ProgressEvent.total) * 100
      });
    }
  })
  .then(res => {
    console.log(res.statusText);
  });
 };
   ...
  

Затем позже при вводе мы имеем:

    <div>
          <input
            style={{ margin: "10px" }}
            type="file"
            name=""
            id=""
            onChange={this.handleSelectedFiles}
          />
          <button onClick={this.handleUpload}>Upload</button>
          <div>{Math.round(this.state.loaded, 2)} %</div>
        </div>
      </div>
  

Ошибка указывает здесь

 onSubmit = evt => {
evt.preventDefault();
const {
  name,
  image,
  gender,
  date_of_birth,
  species,
  info,
  availabilty
} = this.state;
  

Дайте мне знать, если потребуется дополнительный код.

Комментарии:

1. В чем ошибка?

2. @DarrenSweeney Ошибка типа: _this.state.selectedFile равно нулю

3. У вас есть onChange={this.handleSelectedFiles} но метод вызывается handleSelectedFile