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

推薦する

MySQLビューの原理と使用法の詳細な説明

この記事では、例を使用して MySQL ビューの原理と使用方法を説明します。ご参考までに、詳細は以下...

MySQL 学習ノート ヘルプ ドキュメント

システムヘルプを表示help contents mysql> ヘルプコンテンツ; ヘルプ カテ...

jsを呼び出すいくつかの方法が整理され、使用が推奨されています

a タグではクリック イベントがよく使用されます。 1. href="javascript...

VMware+centOS 8 で http プロトコルに基づく Git サービスを構築する方法

目次1. 原因2. デバイス情報3. 準備4. Apacheをインストールする5. gitを設定する...

BootStrap グリッド間に隙間を残す解決策

目次[例を見る]: 【本来の効果は以下の通り】理由は次のとおりです。 【解決】:要約するBootSt...

Linux システムのユーザー管理コマンドの概要

ユーザーとグループの管理1. ユーザーとグループの基本概念ユーザーとグループ:システム上のすべてのプ...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

VMware 上の CentOS に Oracle12.2 をサイレント インストールする詳細なグラフィック チュートリアル

環境準備: VMware+CentOS、jdk 1. システムディスクのサイズを確認する1. コマン...

MySQL 起動エラー 1067 および文字セットを変更して再起動した後の無効な回復

公式サイトからmysql-5.6.37-winx64.zipの解凍バージョンをダウンロードし、構成フ...

フォーム内のどの隠し属性をフォームとともに送信できるか

フォーム内の visibility=hidden および display=none のフォーム要素は...

Docker はクラスター MongoDB 実装手順を構築します

序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...

VMware Workstation16 と Navicat リモート接続での Centos7 での MySQL8.0 インストール プロセス

目次1. CentOS7+MySQL8.0、yumソースインストール2. MySQLにログインしてパ...

Linux に ASPNET.Core3.0 ランタイムをインストールするためのサンプル コード

# 以下の例は x64 ビット ランタイム v3.0.0 用です mkdir /runtimes ...

MySQL の遅いクエリを見つける方法

序文誰もが日常業務で SQL の最適化を経験したことがあると思います。したがって、最適化の前に、遅い...

MySQL 面接でよく聞かれる質問への回答

序文:さまざまな技術職の面接では、MySQL 関連の質問がよくされるようです。開発職の面接でも運用職...