6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Reactの問い合わせフォームの作成

Last updated at Posted at 2020-06-23

プログラミングの勉強日記

2020年6月23日 Progate Lv.146
React Ⅳ

##問い合わせフォームの作成
 今回はContactFormというコンポーネントを作成して作る。

React7.pngReact8.png

 フォームのJSXはHTMLとは違う書き方をするので気を付ける。フォーム全体は<form>タグで囲む。inputタグは<input />、textareaタグは<textarea />と書く。送信ボタンHTML同様にinputタグを使い、type='subimit'を指定する。表示名を変えたい場合にはvalue='表示名'とする。

<form>
  <textarea />
  <input type='submit' />
</form>

##送信完了メッセージの作成
 フォームが送信されたかどうかはstateで管理する。そのためにisSubmittedという真偽値型のstateを用意する。falseのときはフォームをtrueのときは送信完了メッセージを表示する。なので、初期値はfalseである。

ContactForm.js
constructor(props){
  super(props);
  this.state={isSubmitted:false};
}
...

render(){
  let contactForm;
  if(this.state.isSubmitted){
    contactForm= //送信完了メッセージのJSX(※()で囲む)
  }else{
    contactForm= //フォームのJSX
  }
  ...
  return(
    <div>{contactForm}</div>
  );
  ...

##onSubmitイベント
 フォームが送信されたときに処理を実行するには、formのタグに対してonSubmitイベントを指定する。

<form onSubmit = [()=>{処理}}> ... </form>

 stateの値を更新するメソッドを作成して、フォームの送信時に呼び出す。

ContactForm.js
//1.stateの値を更新するメソッドの定義
handleSubmit(){
  this.setState({isSubmitted:true});
}
...
render(){
  //2.フォーム送信時にメソッドを呼び出す
  <form onSubmit={()=>{this.handleSubmit()}}>
  ...

##問い合わせフォームを作成する

ContactForm.js
import React from 'react';

class ContactForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isSubmitted: false,
    };
  }

  handleSubmit(){
    this.setState({isSubmitted:true})
  }

  render() {
    let contactForm;
    if (this.state.isSubmitted) {
      contactForm = (
        <div className='contact-submit-message'>
          送信完了
        </div>
      );
    } else {
      contactForm = (
        <form  onSubmit={()=>{this.handleSubmit()}} >
          <p>メールアドレス(必須)</p>
          <input />
          <p>お問い合わせ内容(必須)</p>
          <textarea />
          <input
            type='submit'
            value='送信'
          />
        </form>
      );
    }
    
    return (
      <div className='contact-form'>
        {contactForm}
      </div>
    );
  }
}

export default ContactForm;
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?