web-dev-qa-db-ja.com

ボタンをクリックしてReact.jsでアラートを実行する方法

反応ファイルのアップロードのチュートリアルを実行してきましたが、それに追加したいと思います。ユーザーがアップロードメッセージをクリックすると、ブラウザが「ファイルをアップロードしています」というプロンプトを表示するようにしようとしています。どうしてもフロントエンドの開発者ではないので、この質問がすごいのなら、ご容赦ください。何らかの理由でこのコードを使用している場合、Webページに移動すると、関数のコードが1回実行され、次にクリックすると再度実行されます。私の使用目的はクリックでのみ実行することですが、私が間違っていることは何か考えていますか?

import React, { Component } from 'react'
import { Alert } from 'react-alert'

class Main extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      imageURL: '',
    };

    this.handleUploadImage = this.handleUploadImage.bind(this);
  }

  handleUploadImage(ev) {
    ev.preventDefault();

    const data = new FormData();
    data.append('file', this.uploadInput.files[0]);
    data.append('filename', this.fileName.value);

    fetch('http://localhost:8000/upload', {
      method: 'POST',
      body: data,
    }).then((response) => {
      response.json().then((body) => {
        this.setState({ imageURL: `http://localhost:8000/${body.file}` });
      });
    });
  }

  render() {
    return (
      <form onSubmit={this.handleUploadImage}>
        <div>
          <input ref={(ref) => { this.uploadInput = ref; }} type="file" />
        </div>
        <div>
          <input ref={(ref) => { this.fileName = ref; }} type="text" placeholder="Enter the desired name of file" />
        </div>
        <br />
        <div>
          <button onclick="myFunction()">Upload</button>
              <script>
              function myFunction() {
                  alert("Your file is being uploaded!")
              }
              </script>

        </div>
        <img src={this.state.imageURL} alt="img" />
      </form>
    );
  }
}

export default Main;
6
Vincent Morris

変化する

<form onSubmit={this.handleUploadImage}>

<form onSubmit={e => this.handleUploadImage(e)}>

これは、クリックしたときにのみ、handleUploadImageを呼び出します。

1
Hemadri Dasari