我已阅读docs并查看source behind reactivity,但我不明白。
有人可以在幕后解释这是如何工作的,因为它对我来说看起来很神奇:)。
答案 0 :(得分:99)
所以它实际上相当直接,在基本层面上涉及两种类型的函数:
创建反应性上下文的函数(反应函数)
使无效上下文无效的功能(使功能无效)
可以兼顾两者的功能。 (我说谎有3个)
当你拨打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
invalidating function
又是context
context
并在内部将其与关键字“name”关联当这些函数返回时,meteor会清理活动的上下文全局变量
Session.set是另一个能够使context
无效的功能。
contexts
无效context
在失效时运行其无效回调。 contexts
无效(这是Session.get的设计,而不是无效回调必须做的事情)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