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

推薦する

Ubuntu 20.04 デスクトップのインストールとルート権限の有効化および SSH インストールの詳細

記事は主にUbuntu 20.04の簡単なインストールプロセスを記録し、インストール後に国内ソースを...

Linux で毎日データベースの自動バックアップを設定する方法

この記事では、Centos7.6 システムと Oracle11g を例に挙げます。 1. まずデータ...

Docker に Kong ゲートウェイをインストールする方法の例

1. Dockerネットワークを作成する docker ネットワーク作成 kong-net 2. デ...

jQueryは動的タグイベントを実装します

この記事では、タグイベントを動的に追加するためのjQueryの具体的なコードを参考までに紹介します。...

Linux gzipコマンドの使用

1. コマンドの紹介gzip (GNU zip) コマンドは、ファイルの圧縮と解凍に使用されます。こ...

MySQL マスタースレーブ同期遅延の原因と解決策

歴史的な理由により、MySQL レプリケーションは、REDO ログではなく論理バイナリ ログに基づい...

HTML テーブルタグチュートリアル (19): 行タグ

<TR> タグの属性は、次の表に示すように、テーブル内の各行のプロパティを設定するために...

MySQL の遅いクエリの最適化方法と最適化の原則

1. 日付のサイズを比較するには、XML に渡される日付形式は 'yyyy-MM-dd...

3つの簡単な例を使ってハイパーリンクの下線を削除する方法

ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...

mysql と oracle のデフォルトのトランザクション分離レベルの説明

1. トランザクション特性(ACID) (1)原子性トランザクションに関係するプログラムによって実行...

Linuxネットワーク構成ツールの使用

この記事では、RHEL8 のネットワーク サービスとネットワーク構成ツール、およびネットワーク ファ...

ウェブサイトのビジュアルデザインパスはユーザーの習慣に合わせる必要がある

クーパー氏は、一般的に上から下、左から右に向かうユーザーの視覚経路について話しました。優れたビジュア...

HTML 形式の JSON 出力の例 (テスト インターフェース)

JSON データを美しいインデント形式で表示するには、最も単純な JSON.stringify 関...

CSS3 ベジェ曲線の例: リンクホバーアニメーション効果の作成

CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...