0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

変数の変更を検知させる JavaScript

Last updated at Posted at 2022-12-06

はじめに

筆者はこれまで Vue などのライブラリ上でウォッチャーや算出プロパティを使用して変数の検知を行ってきた。
しかし今回、業務上でモダンなライブラリが使えなく、バニラのJSでの実装が必要になったためメモ。

実装方法

対象の値を保持させて新しい値と比べれば変更が認識できる。
監視し続けなくてはならないのでとりあえずタイマーを貼って監視する。
※タイマーなので実行され続けるのでご注意ください

.js
// 検知関数
const observer = (getValueFunc, onChangeFunc, intervalTime) => {
  let previousValue = getValueFunc();
  const onObserve = () => {
    const currentValue = getValueFunc();

    // 変更がない時は何もしない
    if (previousValue === currentValue) {
      return;
    }
    onChangeFunc(currentValue);
    previousValue = currentValue;
  };

  setInterval(onObserve, intervalTime);
};

// 試しに実行
(function () {
  // 検知対象
  let targetValue = "初期値";
  // 検知間隔
  const intervalTime = 100;

  // 変更検知の対象の取得
  const getValueFunc = () => {
    return targetValue;
  };
  // 変更検知時の処理
  const onChangeFunc = (changeValue) => {
    console.log(`変更後の値は${changeValue}`);
  };

  observer(getValueFunc, onChangeFunc, intervalTime);

  // 値を変更させてみる
  targetValue = "変更後";
})();

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?