Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

問題の説明:

ページ A と B の 2 つがあり、各ページにはgetList()メソッドがあります。どちらの方法でも同じパラメータ C を渡す必要があり、パラメータ C を選択するプロセスはかなり複雑です。インターフェース A と B を切り替えるときにパラメーター C を繰り返し選択する問題を回避するために、パラメーター C を vuex に保存し、watch を使用して両方のページでパラメーター C をリッスンしgetList()メソッドを実行します。その後、問題が見つかりました。ページ A からページ B に入った後、ページ B でパラメータ C を再度選択すると、ページ A のgetList()メソッドも実行されます。逆に、ページ B からページ A に移動した後、ページ A でパラメータ C を変更すると、ページ B のgetList()メソッドも実行されます。

後で調べたところ、これはキープアライブの使用が原因であることが分かりました。キープアライブは Vue インスタンスを常にメモリ内に保持するため、Vue インスタンスは常に存在し、対応するウォッチャーは常に有効です。関連情報を検索したところ、多くの人がこの問題に遭遇していることがわかりました。最終的に、次の 2 つの解決策を見つけました。

解決策1

ルーターパスによってgetList()実行するかどうかを決定する

時計:
        いくつかの値(新しい値、古い値) {
            if (this.$route.fullPath === 'ページルーティングパス') {
                // 何かをする
            }
        }
    }

解決策2

ページがアクティブ状態かどうかを判断するためのフラグ パラメータを追加します。キープアライブ キャッシュを使用するコンポーネントは、 activatedイベントとdeactivatedイベントのみをトリガーするため、これら 2 つのイベントがトリガーされたときにフラグを true と false に設定します。フラグが true の場合にのみ、 getList()が実行されます。

{
  データ () {
    戻る {
      アクティブフラグ: false
    };
  },
  時計:
    'someValue'(値) {
      if(val && this.activatedFlag) {
        このリストを取得します。
      }
    }
  },
  アクティブ化(){
    this.activatedFlag = true;
  },
  非アクティブ化(){
    this.activatedFlag = false;
  }
}

ページ数が多く、各ページの関数名が一貫していない場合は、上記コードの watch 部分を削除して mixin に記述し、必要なページにインポートすることができます。

  「@/mixin/activeFlag」からactiveFlagをインポートします。

  エクスポートデフォルト{
    ミックスイン: [activeFlag],
    時計:
        'someValue'(値) {
          if(val && this.activatedFlag) {
            this.getlistA();
            this.getlistB();
          }
        }
      },
  }

上記は、vue プロジェクト ウォッチで関数が繰り返しトリガーされる問題に対する 2 つの解決策の詳細です。vue ウォッチ関数が繰り返しトリガーされる問題の解決策の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vue でポップアップ ウィンドウをクリックしたときにクリック イベントを自動的にトリガーするソリューション (シミュレーション シナリオ)
  • vue elementUI が el-select を使用するときに変更イベントがトリガーされる問題を解決する
  • Vue の親コンポーネントのボタンをクリックして子コンポーネントをトリガーするイベントの詳細な説明
  • Vueは、短時間に連続してクリックされた後に複数のトリガーリクエストが発生するのを防ぎます。
  • vue.watch のトリガー条件についての簡単な説明
  • Vueで自動トリガー機能を実現する方法

<<:  Linux で複数の mysql5.7.19 (tar.gz) ファイルをインストールする方法

>>:  知らないかもしれない奇妙で興味深いDockerコマンド

推薦する

Linuxはバイナリモードを使用してmysqlをインストールします

この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...

MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル

MySQLをインストールする6つの手順(インストールパッケージのみがインストール場所を選択できます)...

Windows 10 での Hyperledger Fabric 1.4 環境構築プロセスの図

内容Hyperledger fabric1.4環境のWindows 10でのセットアップ前提条件Wi...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

ブラウザの互換モードでボタン内のテキストが垂直方向に中央揃えにならない問題について簡単に説明します。

XML/HTML コードコンテンツをクリップボードにコピー<ボタンスタイル= "カ...

Dockerコンテナにホストディレクトリへの書き込み権限がない場合の解決策

Docker コンテナを適用する場合、多くの場合、ホスト ディレクトリを Docker コンテナにマ...

Ubuntu ターミナル マルチウィンドウ 分割画面 ターミネーター

1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...

Vue ページに img 画像を導入する方法

HTMLを学ぶとき、画像タグ<img>は画像を導入します <img src=&qu...

MySQL が自動的に再起動する問題の解決方法

序文最近、テスト環境で MySQL データベースが自動的に再起動し続ける問題が発生しました。原因は、...

CSS3はシームレスなスクロールと手ぶれ防止を実現します

質問画像とテキストのシームレスなスクロールは、一般的に携帯電話では良い効果をもたらしますが、一部のモ...

Vue シンプル登録ページ + 確認コード送信機能の実装例

目次1. エフェクト表示2. 検証コードとメールプッシュ管理の強化(後述のブログを参照) 3. 一般...

Tomcat のパフォーマンス最適化方法の簡単な概要

Tomcat自体の最適化Tomcat メモリ最適化起動時に大きなメモリ ブロックが必要であることを ...

ネイティブ JS でスネーク ゲームを書く

この記事では、参考までに、JSでスネークゲームを書くための具体的なコードを紹介します。具体的な内容は...

Linux での JDK のインストール (OpenJDK のアンインストールを含む) の概要

1. openjdkを表示する rpm -qa|grep jdk 2. openjdk を削除します...

シンプルな広告ウィンドウを実現するjs

この記事では、参考までに、シンプルな広告ウィンドウを実装するためのjsの具体的なコードを紹介します。...