WeChatアプレットでグローバル変数を監視する方法

WeChatアプレットでグローバル変数を監視する方法

最近、仕事で問題に遭遇しました。グローバル変数 red_heart があります。これは多くの場所で使用されているため、変更があった場合は、使用されている場所も変更する必要があります。ただし、ネイティブ アプレットには Vue のような関連するプラクティスはありません。そこで、グローバル変数の変更を自分で実装し、この変数が使用されている場所で再レンダリングしたいと思います。

始める

まず、グローバル変数にred_heartがなければなりません

グローバルデータ: {
    赤いハート:0,
  },

次に、onLaunch メソッドのグローバル変数に Proxy プロキシを追加します。

プロキシは理解しやすく、理解できる人なら誰でも理解できます。

this.globalData = 新しいプロキシ(this.globalData, {
      get(ターゲット、キー){
        ターゲット[キー]を返します。
      },
      set:(ターゲット、キー、値)=>{
        if(キー === "red_heart"){
          this.globalDep.RedHeartDep.notify()
        }
        Reflect.set(ターゲット、キー、値) を返します。
      }
    });

主にsetメソッドを見ると、this.globalDep.RedHeartDep.notify()がありますが、これは何でしょうか。これは私がグローバルに作成した Dep (依存関係コレクションの略) です。

コード

グローバルDep:{
    レッドハートDep:
      サブ:[],
      addSub(ウォッチ){
        this.subs.push(ウォッチ)
      },
      ウォッチIDを削除する
        this.subs = this.subs.filter((item)=>{
          item.id != id を返します
        })
      },
      通知(){
        タイムアウトを設定します(()=>{
          this.subs.forEach(w=>w.update())
        },0)
      }
    }
  }

subs は依存関係、addSub、removeWatch を収集するために使用される配列であり、notification はこれを更新するように通知するために使用されます。

ここで別の疑問が浮かびます。この依存関係をどこに追加するかということです。もちろん、依存関係は使用される場所、つまりコンポーネントが作成されるときに追加する必要があります。

完全なコンポーネント js コードを添付します。

const アプリ = getApp()
成分({
  プロパティ:

  },
  データ: {
    赤いハート:0
  },
  生涯:
    添付(){
      ウォッチ = {
        id:this.__wxExperserNodeId__、
        更新:()=>{
          this.setData({
            red_heart:app.globalData.red_heart
          })
        }
      }
      app.globalDep.RedHeartDep.addSub(ウォッチ)
      app.globalData.red_heart = app.globalData.red_heart
    },
    分離された(){
      app.globalDep.RedHeartDep.removeWatch(this.__wxExpparserNodeId__) を参照してください。
    }
  },
  メソッド: {
    ハンドクリック(){
      app.globalData.red_heart++
      コンソールログ(app.globalData)
    }
  }
})

依存関係をアタッチに追加し、コンポーネントが破棄されたときに依存関係を削除することを忘れないでください。この ID はミニプログラムのコンパイル ID であり、直接使用されます。
これで完了です!

要約する

WeChatミニプログラムがグローバル変数を監視する方法についてはこれで終わりです。ミニプログラム監視のグローバルコンテンツの詳細については、123WORDPRESS.COMで以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChatアプレットのグローバル変数変更監視を実装する方法

<<:  Windows に MySQL 5.7.18 の解凍バージョンをインストールするチュートリアル

>>:  Centos7でポートを開く方法

推薦する

MySQL で JSON 形式のフィールドをクエリする詳細な説明

作業開発プロセス中に、顧客の名前、携帯電話番号、ID カード、およびドキュメントの種類を動的に保存す...

MySQL無料インストール版を解凍した後にパスワードが見つからない問題を解決する方法

1. mysql-8.0.21-winx64を解凍する2. 環境変数を設定し、アドレスをbinフォル...

MySQLストアドプロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

MySQLのスケジュールタスクが正常に実行できない原因の分析と解決

目次序文原因分析と解決策スケジュールされたタスクを迅速に実行する要約する序文データベースのスケジュー...

VMware Workstation 14 Pro のインストールとアクティベーションのグラフィック チュートリアル

この記事では、VMware Workstation 14 Proのインストールとアクティベーションに...

独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法

Docker では、ポート マッピングを使用して、Docker コンテナーのサービスをホスト マシン...

Linux md5sumコマンドの使い方

01. コマンドの概要md5sum - MD5検証コードを計算して検証するmd5sum コマンドは、...

MySQL インデックス プッシュダウンの詳細

目次1. 左端接頭辞原則2. 表に戻る3. インデックスプッシュダウン序文:インデックス プッシュダ...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文JS の this ポインターは、初心者にとって常に頭痛の種でした。今日は、これが地面に落ちたと...

Angular の 12 の典型的な問題について簡単に説明します

目次1. Angular 2 アプリケーションのライフサイクル フックとは何ですか? 2. Angu...

Linux CentOS 7.4 で mysql5.7.20 のパスワードを変更する方法

MySQL がバージョン 5.7 にアップグレードされた後、セキュリティが大幅に向上しました。しかし...

HTML 縦列表示テキストを使用してテキストを縦列で表示します

コードをコピーコードは次のとおりです。 <span style='display:bl...

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

デザイン協会: なぜ間違った場所を探したのですか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...