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>
iOSシミュレーターを使ってWebサイトを開発者ツールを見ながら実機表示で開発する方法
Dart Sassの変数の基本的な使い方|Dart Sass入門
W3 Total Cacheをレスポンシブデザインのテーマで使用する時の注意ポイント!!【WordPress】
Vue CLIでVue.jsの開発環境をセットアップするまでの流れ
HTMLタグの入力をラクにするスニペット集
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
常時SSL化の設定をしたのに「保護された通信」が表示されない時はパスにHTTPが残っているのかも?
思考したり情報整理したい時はMarkdown記法で文章を書き出そう!!Webデザイナーの情報整理術
アイコンフォントをPCにインストールしている場合は、コーディング後の確認に注意
mac環境にnodebrew経由でNode.jsをインストールしてバージョンを管理する方法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?