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>
Nuxt.jsでVuexストア連携を行う方法|Nuxt.jsの基本
JavaScriptのテンプレートリテラル内で条件分岐を行う方法
「とりあえず無料版!」ではなく、機能を知った上で判断したいMAMPとMAMP PROの比較
WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
Movable TypeでMTLoopを使ってkeyでソートしたときに、10個以上表示させると並びがおかしくなる
SafariのURLメニュー部分も考慮できるCSSの単位「dvh」
Google Maps APIを使ってGoogle Mapsをウェブサイトに表示させる方法
.gitignoreに含めた方がいいファイル・フォルダが一覧でまとまっている「gitignore.io」
gulp-sass 5の「does not have a default Sass compiler」エラーを解消する
iTerm2でさらに細かい機能の設定ができる環境設定の「Advanced」タブ
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Path Finderを使ってキーボードだけでファイル操作する方法(基本操作編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる