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でポートを開く方法

推薦する

ES6 クラス継承を使用してゴージャスなボール効果を実現する方法

目次導入実装手順キャンバス環境を作成するライティングボールBallクラスを継承するMoveBallク...

Linux での MySQL マルチインスタンスの展開とインストール ガイド

MySQLマルチインスタンスとは簡単に言うと、MySQL マルチインスタンスとは、サーバー上で複数の...

HTMLチュートリアル、簡単に学べるHTML言語

1. <body background=画像ファイル名 bgcolor=color text=...

ネイティブJSを使用した遅延読み込みlazyLoadの3つの方法の概要

目次序文方法1: 高コントラスト方法2: getBoundingClientRect() APIを使...

Linux での Hbase のインストールと設定のチュートリアル

目次Linux での Hbase のインストールと設定1. Hbaseインストールパッケージをダウン...

JavaScript を使用したコマンドライン アプリケーションの構築

目次1. ノードをインストールする2. Commander.jsをインストールする3. JavaSc...

mysql 5.7.11 winx64 初期パスワード変更

公式サイトからMySQL-5.7.11-winx64の圧縮版をダウンロード。インストール後、パスワー...

HTML5+CSS3 ヘッダー作成例と更新

前回、私たちは 2 つのヘッダー レイアウト (フレックスボックス 1 つとフロート 1 つ) を考...

Dockerコンテナを停止および削除できない問題の解決策

実行中のコンテナIDを見つける ドッカーps上記のコンテナの物理的な場所を見つける /var/lib...

Linux で Sudo を使用して権限を委譲する

sudo 権限委譲の概要su スイッチ ID: su –l ユーザー名 –c 'コマンド&#...

Linux に JDK1.8 をインストールするための詳細なチュートリアル

1. 設置前の清掃 rpm -qa | grep jdk rpm -qa | grep gcj yu...

Nexus を使用して jar パッケージをプライベート サーバーに追加する方法

なぜ Nexus プライベート サーバーを構築する必要があるのでしょうか。その理由は非常に簡単です。...

Flexboxレイアウトの最もシンプルなフォーム実装

フレキシブル レイアウト (Flexbox) はますます人気が高まっており、CSS レイアウトの記述...

HTML 選択ボックスのプレースホルダーの作成に関する問題

テキスト入力でプレースホルダーを使用していますが、問題なく動作します。しかし、選択ボックスにはプレー...

ServerManager の起動時にデータベースに接続できないエラーを解決する方法

Servermanager 起動時の接続データベース エラーmgrstart.batを実行しますエラ...