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>
Apacheのテストページを非表示にする方法
Vue.jsでtemplateタグ内にscriptやstyleタグを生成する方法|Tags with side effect are ignored
WordPressのwp_is_mobile()で条件分岐をするときは、キャッシュの設定に注意
Vue CLIでの画像パスの指定方法・配置場所まとめ
MacのRubyをrbenvで管理する方法
Facebookでシェアした記事の画像反映ができていない時の修正方法
npm install時に「cb() never called!」とエラーが表示されたときの解決法
iTerm2でさらに細かい機能の設定ができる環境設定の「Advanced」タブ
Visual Studio CodeでSVGをプレビューする拡張機能「SVG Preview」
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」