我已阅读文档并查看了react 背后的来源,但我不明白。
有人可以解释一下这是如何在幕后工作的,因为它对我来说就像魔法:)。
所以它实际上相当简单,在基本层面上涉及两种类型的功能:
创建反应式上下文的函数(反应式函数)
使反应性上下文无效的函数(使函数无效)
两者兼得的功能。(我谎称有 3 个)
当您调用 areactive 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
并在内部将其与键“名称”相关联当这些函数返回时,meteor 清理活动上下文全局变量
Session.set 是另一个能够使context
.
context
Session 创建的与键“name”关联的所有 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