web-dev-qa-db-ja.com

react.jsでEnterキーを使用してフォームを送信する方法は?

これが私のフォームとonClickメソッドです。キーボードのEnterボタンが押されたときにこのメソッドを実行したいと思います。どうやって ?

N.B:jqueryは評価されません

 comment: function (e) {
        e.preventDefault();
        this.props.comment({comment: this.refs.text.getDOMNode().value, userPostId:this.refs.userPostId.getDOMNode().value})
    },


 <form className="commentForm">
     <textarea rows="2" cols="110" placeholder="****Comment Here****" ref="text"  /><br />
    <input type="text" placeholder="userPostId" ref="userPostId" /> <br />
     <button type="button" className="btn btn-success" onClick={this.comment}>Comment</button>
    </form>
71
Jason Bourne

<button type="button"<button type="submit"に変更します。 onClickを削除します。代わりに<form className="commentForm" onSubmit={this.onCommentSubmit}>を実行してください。これは、ボタンをクリックしてリターンキーを押すのをキャッチするはずです。

編集:Jamesがコメントで述べているように、コールバックでevent.preventDefault()を呼び出して、action URLをロードしようとするページを停止することもできます。

コールバックでthisを使用する場合、コンストラクターでonSubmit={(e) => this.onCommentSubmit(e)}またはthis.onCommentSubmit = this.onCommentSubmit.bind(this)、またはe7の矢印メソッドonCommentSubmit = (e) => {...}の矢印関数を使用できます。

onFormSubmit = e => {
  e.preventDefault();
  const { name, email } = this.state;
  // send to server with e.g. `window.fetch`
}

...

<form onSubmit={this.onFormSubmit}>
  ...
  <button type="submit">Submit</button>
</form>
133
Dominic

keydownイベントを使用して実行します。

   input: HTMLDivElement | null = null;

   onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {
      // 'keypress' event misbehaves on mobile so we track 'Enter' key via 'keydown' event
      if (event.key === 'Enter') {
        event.preventDefault();
        event.stopPropagation();
        this.onSubmit();
      }
    }

    onSubmit = (): void => {
      if (input.textContent) {
         this.props.onSubmit(input.textContent);
         input.focus();
         input.textContent = '';
      }
    }

    render() {
      return (
         <form className="commentForm">
           <input
             className="comment-input"
             aria-multiline="true"
             role="textbox"
             contentEditable={true}
             onKeyDown={this.onKeyDown}
             ref={node => this.input = node} 
           />
           <button type="button" className="btn btn-success" onClick={this.onSubmit}>Comment</button>
         </form>
      );
    }
8
am0wa