todoリストを例に説明していきます。
inputの値を取得して、submitイベントでtodoリストに追加していくというものです。
※todoリストに追加していくロジックは今回関係ないので省略します。
<form @submit.prevent="addTodo">
<input type="text" ref="comment">
<button type="submit">追加<button>
</form>
入力・追加のコンポーネントを作っているときに、2点の疑問が起こりました。
- submitイベントが
<button>
ではなく、<form>
についているのはなぜか - submitにpreventを付ける必要があるのか
submitイベントが<button>
ではなく、<form>
についているのはなぜか
vue以前の理解不足でしたが、submitイベントは<button>
や<input type="submit">
ではなく、<form>
で発生するものでした。
submit イベントは
<form>
要素自身で発生するものであり、その中の<button>
や<input type="submit">
で発生するものではないことに注意してください。
submit イベントは、ユーザーが送信ボタン (
<button>
または<input type="submit">
) を押したり、 Enter キーをフォーム内のフィールド (例えば<input type="text">
) の編集中に押したりしたときに発生します。このイベントはform.submit()
メソッドを呼び出した場合には送信されません。
submitにpreventを付ける必要があるのか
submitイベントが本来、action属性での画面遷移を想定しているので、意図しない画面遷移を避けるためにpreventを使います。
todoアプリではsubmitしたときに画面遷移を意図しているわけではないので、preventを付けるということでした。