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コマンド

推薦する

VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法

今夜の夕食後にノートパソコンの電源を入れたところ、問題が発生しました。通常、コンピューターがスリープ...

js は axios 制限リクエスト キューを実装します

目次背景は次のとおりです。何が起こるでしょうか?背景は次のとおりです。実際の開発では、ネットワークの...

クールなページング効果を実現するネイティブJS

この記事では、次のような効果を持つ JS ページング効果の例を紹介します。クールだと思いませんか? ...

Vueは3階層メニューを再帰的に実装する

この記事の例では、3階層メニューを再帰的に実装するVueの具体的なコードを参考までに共有しています。...

HTML テーブル マークアップ チュートリアル (28): セルの境界線の色属性 BORDERCOLOR

テーブルを美しくするために、セルごとに異なる境界線の色を設定できます。基本的な構文<TD 境界...

JavaScript ESの新機能letとconstキーワードに基づく

目次1. letキーワード1.1 基本的な使い方1.2 変動昇進はない1.3 一時的なデッドゾーン1...

Vueリスナーの使用例の詳細な説明

1つ目はjQueryのajaxを使用してリクエストを送信することです ユーザーが登録するときに、リス...

JavaScript 関数構文の説明

目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...

MySQL information_schema データベースの詳細な説明

1. 概要information_schema データベースは performance_schema...

Centos 6.5 での mysql-community-server. 5.7.18-1.el6 のインストール

次のコマンドを使用して、MySQL Serverがインストールされているかどうかを確認します。 [r...

初心者向けの MySQL のインストール方法 (効果が実証済み)

1. ソフトウェアのダウンロードMySQL のダウンロードとインストール:公式サイトのダウンロード...

React Routerの歴史について簡単に説明します

React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...

1つの記事でTypeScriptのデータ型について学ぶ

目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...

HTML で vue-router を使用するサンプル コード

vue と vue-router の紹介 <script src="https://...

HTMLフォーム送信方法のケーススタディ

フォームの送信方法をまとめると次のようになります。 1. 送信ボタンを使用して送信します。送信ボタン...