- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已阅读 docs并查看了 source behind reactivity ,但我不明白。
有人可以解释一下它在幕后是如何工作的吗,因为它对我来说就像魔法:)。
最佳答案
所以它实际上相当简单,在基本层面上涉及两种类型的函数:
创建响应式上下文的函数(响应式函数)
使响应式上下文无效的函数(无效函数)
可以同时执行这两种操作的函数。 (我撒谎有3个)
当您调用reactive function
时它创建了一个 context
该 meteor 存储在全局范围内,并且 reactive function
订阅invalidation
打回来。您传递给响应式(Reactive)函数或从其中运行的任何函数的函数可以是 invalidating function
并且可以抓取当前的context
并将其存储在本地。这些函数可以随时(例如数据库更新或简单的计时器调用)使 context
失效。 。原文reactive function
然后将接收该事件并重新评估自身。
这里是使用meteor函数的一步一步(注意 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
并将其在内部与键“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
关于meteor - Meteor 的 react 性在幕后是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10260015/
我是一名优秀的程序员,十分优秀!