docsを読み、reactivity の背後にあるソースを見ましたが、理解できません。
私には魔法のように見えるので、誰かがこれが舞台裏でどのように機能するかを説明できますか:)。
docsを読み、reactivity の背後にあるソースを見ましたが、理解できません。
私には魔法のように見えるので、誰かがこれが舞台裏でどのように機能するかを説明できますか:)。
したがって、実際にはかなり簡単です。基本的なレベルでは、2 種類の関数が関係しています。
リアクティブ コンテキストを作成する関数 (リアクティブ関数)
リアクティブ コンテキストを無効にする関数 (無効化関数)
両方できる機能。(3つあると嘘をついた)
を呼び出すと、meteor がグローバルに保存し、コールバックをサブスクライブするreactive function
が作成されます。リアクティブ関数に渡す関数、またはその中から実行される関数は、現在のものを取得してローカルに保存することができます。これらの関数は、データベースの更新や単にタイマー呼び出しのように、いつでもそれを無効にすることができます。その後、オリジナルはそのイベントを受け取り、それ自体を再評価します。context
reactive function
invalidation
invalidating function
context
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
とa の両方ですinvalidating function
context
をキー「name」と内部的に関連付けますこれらの関数が戻ると、meteor はアクティブなコンテキスト グローバル変数をクリーンアップします。
Session.set は、context
.
context
、キー「name」に関連付けられた Session によって作成されたすべてのを無効にしています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
リアクティブ プログラミングは、実際には meteor または JS 固有のものではありません
。
ここで読むことができます: http://en.wikipedia.org/wiki/Reactive_programming