Vue.jsで入力を止めて一定時間経ったら発火するinputの作成方法|Lodashの「debounce」を活用
Vue.jsで@inputを使うと、1文字入力する度にイベントが発火してしまいます。
これだと処理が大量に発生してしまいますが、かと言って@changeだと入力後別の場所をクリックするなどしてフォーカスが外れたときにようやく発火します。
「入力していて、一定時間入力が止まったら自動保存」みたいに、「一定時間入力が止まったら○○する」は、よく使いそうなので、今回はその方法をまとめておきます。
lodashのインストール
lodashというモジュールを使用すると、かなりラクに実現できます。
まずは下記コマンドでインストールします。
npm install -d lodashlodashの使い方
lodashをインストールしたら、.vueファイル内で「debounce」という関数を使って時間を指定します。
「setTimeout」を使った遅延処理の場合は遅れるだけで何度も発火してしまいますが、「debounce」の場合は発火は1回で、連続して関数が実行されている場合は発火せずに、止まってから指定した時間分待って発火します。
Vue3の場合
Vue3から登場したComposition APIを使って書きたい場合は下記のように書きます。
<template>
<label>
<input @input="onDelayAction">
</label>
</template>
<script>
import { defineComponent, reactive } from "vue";
import { debounce } from 'lodash';
export default defineComponent({
name: 'delayInput',
setup() {
let state = reactive({
});
const onDelayAction = debounce(() => {
// 発火したい処理を書く
}, 2000) // 2000ms指定
return {
state,
onDelayAction
}
}
});
</script>今回は時間指定に「2000」を指定しているので、入力後に2000ms(2秒)止まったら発火します。
書き方は「setTimeout」を使った遅延処理とほとんど変わらず、名前が「debounce」に変わったくらいです。
Vue2の場合
Vue2の古いOption APIの場合は下記のように書きます。
Vue3でも一応この書き方は可能です。
<template>
<label>
<input @input="onDelayAction">
</label>
</template>
<script>
import { debounce } from 'lodash';
export default {
name: 'hogeComponent',
methods: {
onDelayAction: debounce(() => {
// 発火したい処理を書く
}, 2000) // 2000ms指定
}
}
</script>

Post Snippetsを使ってWordPressでショートコードをの登録と管理をもっと楽に!!
Movable Typeでコメントアウトして出力時に無視する方法
SourceTreeを開くと「’git status’ failed with code 69:’」というポップアップが出てくる場合の解決方法
js-cookieでウェブサイトのダークモード表示設定をユーザーごとに保存しておく方法
Sassのマップ機能を使った変数の管理方法
Visual Studio CodeでMovable TypeのMTMLファイルを開く拡張機能「Movable Type Markup Language Syntax」
Vue CLIでGA4を導入する方法
iOS Safariで指定したフォントサイズにならない場合の対処法
「とりあえず無料版!」ではなく、機能を知った上で判断したいMAMPとMAMP PROの比較
Visual Studio Codeで「.html」拡張子以外のファイルでもEmmetを使えるようにする
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
JavaScriptで日付をコピーして計算すると、コピー元の日付も変わってしまう場合の対処法
WordPress5.5のサイトマップ機能を無効にする
Visual Studio Codeでファイル差分の比較を行う方法
Vue CLIでの画像パスの指定方法・配置場所まとめ
1Passwordでウェブサイトの入力フォームを一瞬で入力する方法
Macでリッチテキストをコピペしたときに、余計なスタイルが入ってしまうのを回避する方法
Vue CLIのプロジェクト管理用のGUI機能から環境を構築する
Google日本語入力のサジェスト(変換候補)の選択方法
個人ブログにコメント欄は必要なのかどうか
Sketchのレイヤー周りの基本操作|グループ化やマスク、オブジェクトのロックや表示切り替えなどのレイヤーでできること