docsを読み、reactivity の背後にあるソースを見ましたが、理解できません。
私には魔法のように見えるので、誰かがこれが舞台裏でどのように機能するかを説明できますか:)。
docsを読み、reactivity の背後にあるソースを見ましたが、理解できません。
私には魔法のように見えるので、誰かがこれが舞台裏でどのように機能するかを説明できますか:)。
したがって、実際にはかなり簡単です。基本的なレベルでは、2 種類の関数が関係しています。
リアクティブ コンテキストを作成する関数 (リアクティブ関数)
リアクティブ コンテキストを無効にする関数 (無効化関数)
両方できる機能。(3つあると嘘をついた)
を呼び出すと、meteor がグローバルに保存し、コールバックをサブスクライブするreactive functionが作成されます。リアクティブ関数に渡す関数、またはその中から実行される関数は、現在のものを取得してローカルに保存することができます。これらの関数は、データベースの更新や単にタイマー呼び出しのように、いつでもそれを無効にすることができます。その後、オリジナルはそのイベントを受け取り、それ自体を再評価します。contextreactive functioninvalidationinvalidating functioncontextcontextreactive function
以下は、流星関数を使用した段階的な手順です (Tracker.autorun以前は と呼ばれていたことに注意してくださいDeps.autorun)。
Tracker.autorun(function(){
alert("Hello " + Session.get("name"));
});
Session.set("name", "Greg");
contextcontextの無効化イベントにコールバックをアタッチしますcontext初めて実行されます。contextを現在アクティブとしてグローバルに保存しますcontextreactive functionとa の両方ですinvalidating functioncontextをキー「name」と内部的に関連付けますこれらの関数が戻ると、meteor はアクティブなコンテキスト グローバル変数をクリーンアップします。
Session.set は、context.
context、キー「name」に関連付けられた Session によって作成されたすべてのを無効にしていますcontexts無効化されると、無効化コールバックを実行します。contexts を無効にするだけです (これは 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