私は docs を読んで 反応性の背後にあるソース を見ましたが、それは理解できません。
それが私には魔法のように見えるので、誰かがこれが舞台裏でどのように機能するか説明できますか?.
したがって、実際にはかなり単純です。基本的なレベルでは、2種類の関数が関係しています。
リアクティブコンテキストを作成する関数(リアクティブ関数)
リアクティブコンテキストを無効にする関数(無効化関数)
両方を実行できる関数。 (うそつき3つあります)
reactive function
を呼び出すと、Meteorがグローバルに保存し、reactive function
がcontext
コールバックをサブスクライブするinvalidation
が作成されます。リアクティブ関数、またはその関数から実行される関数に渡す関数は、invalidating function
にすることができ、現在のcontext
を取得してローカルに保存できます。これらの関数は、dbの更新や単にタイマーの呼び出しのように、いつでもそのcontext
を無効にすることができます。その後、元のreactive function
はそのイベントを受け取り、自分自身を再評価します。
次に、流星関数を使用した段階的な手順を示します(以前はTracker.autorun
はDeps.autorun
と呼ばれていたことに注意してください)。
Tracker.autorun(function(){
alert("Hello " + Session.get("name"));
});
Session.set("name", "Greg");
context
を作成しますcontext
の無効化イベントにコールバックをアタッチしますcontext
で初めて実行されます。context
を現在アクティブなcontext
としてグローバルに保存しますreactive function
とinvalidating function
の両方ですcontext
を設定し、内部的にキー「名前」に関連付けますこれらの関数が戻ると、meteorはアクティブなコンテキストグローバル変数をクリーンアップします
Session.setは、context
を無効化できる別の関数です。
context
sを無効にしますcontexts
はすべて、無効化されると、無効化コールバックを実行します。context
sを無効にするだけです(これはSession.getの設計であり、無効化コールバックが実行する必要があることではありません)。contexts
を囲んでいるものは、無効化コールバックを実行します。context
を再度設定します。実装全体も実際にはかなり単純明快です。ここで確認できます
https://github.com/meteor/meteor/blob/master/packages/tracker/tracker.js
そしてそれがどのように機能するかの良い例はここにあります:
https://github.com/meteor/meteor/blob/master/packages/reactive-dict/reactive-dict.js
反応型プログラミングは実際には流星やJS固有ではありません
ここで読むことができます: http://en.wikipedia.org/wiki/Reactive_programming