この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-06-11 07:07:02

タイトル: クリック時のイベント処理(on:click)
SEOタイトル: Vue.js @click / v-on:click 完全ガイド(修飾子・$event・Composition API・$emit)

この記事の要点
  • Vue.js のクリックイベントは @click="method"v-on:click の省略形)
  • 引数や $event を渡したいときは @click="method($event, id)"
  • 修飾子で挙動を変更: .stop / .prevent / .once / .self / .capture
  • Composition API では const handle = () => { ... } を template で @click="handle"
  • 子コンポーネントから親へは $emit("click", payload)(Vue3: defineEmits

基本: @click と v-on:click

Vue.js でクリックイベントを扱う最も基本的な書き方は v-on:click ディレクティブで、@ で省略できます。



$event: ネイティブイベントオブジェクト

メソッドの引数に $event を渡すと、DOM の MouseEvent をそのまま受け取れます。



引数を書かずに @click="onClick" としても、第一引数に自動的に MouseEvent が渡されます。

イベント修飾子(Modifiers)

頻出のイベント処理を 修飾子で 1 行に書けます。e.preventDefault() 等を JS 側に書かずに済みます。

修飾子動作等価な JS
.stopイベント伝播を止めるe.stopPropagation()
.preventデフォルト動作をキャンセルe.preventDefault()
.captureキャプチャフェーズで処理addEventListener の第 3 引数 true
.self自身が target のときだけ発火if (e.target === e.currentTarget)
.once一度だけ発火addEventListener の {once:true}
.passiveパッシブリスナー(スクロール最適化)addEventListener の {passive:true}

独自処理

マウスボタン・キー修飾子














Composition API でのクリック処理



子コンポーネントから親へ: $emit

子コンポーネントでクリックが起きたとき、親に通知するには $emit(Composition API では defineEmits)を使います。









v-on のオブジェクト構文(複数イベント)

React onClick との比較

項目Vue.jsReact
記法@click="fn"onClick={fn}
引数渡し@click="fn(id)"onClick={() => fn(id)}
イベント取得$event または第一引数第一引数 SyntheticEvent
preventDefault@click.prevente.preventDefault() 手動
stopPropagation@click.stope.stopPropagation() 手動
カスタムイベント$emit + defineEmitsprops として渡す

よくあるトラブル

  • @click="fn()" と書いてレンダリング時に即実行されてしまう → 引数が無いなら @click="fn" に。引数があるなら @click="fn(arg)" のまま OK(テンプレ式は遅延評価される)
  • v-for 内でクリック先が間違う:key が無い / 重複している。一意キーを付ける
  • 子コンポーネントの @click が効かない → ルート要素が単一でない場合、attrs 継承されない。defineEmits(['click']) + @click="$emit('click', $event)" で明示
  • ボタン連打で多重送信.once 修飾子、または disabled 制御

FAQ

Q: Vue 2 と Vue 3 で書き方は変わる?
A: 基本構文は同じ(@click、修飾子、$emit)。Vue 3 は Composition API(