gpt4 book ai didi

meteor - Tracker.autorun 如何挑选它的计算?

转载 作者:行者123 更新时间:2023-12-04 23:00:31 25 4
gpt4 key购买 nike

Tracker.autorun ,这主要是神奇的......但我想知道它如何决定哪些变量将形成计算的依赖关系。它只挑选出“ react 性”变量,例如以下内容:

  window.bar = 1
Tracker.autorun (c) =>
bar = window.bar
foo = Session.get('foo')
console.log('autorun', foo, bar)

如果我更改 Session.set('foo') 的值这将导致计算再次运行。
而只是改变 window.bar不会导致重新运行。如果我使用订阅结果(不是集合),这也可以,所以我猜也是响应式(Reactive)的。

是否有任何指南可以更好地理解这种行为?

编辑:

感谢下面的评论澄清了计算能够被推断出来,因为访问器用于 react 变量,所以 meteor 可以跟踪 deps。

但是,我需要更清楚地了解何时标记了 var。例如在下面这个例子中, subscribe调用在 autorun 之外,但它会将结果放入数组中。所以这意味着 Tracker 不仅跟踪对 (reactive var) 访问器方法的调用,还跟踪 block 内引用的任何变量——即使设置这些方法的调用在 autorun() 之外。堵塞。
  subList = [
Meteor.subscribe("Players"),
Meteor.subscribe("Stuff" )
]

Tracker.autorun (c) =>
subReady = _.filter subList, (item) ->
return item.ready()
allDone = (subList.length == subReady.length)
# this code will rerun when the subs ready() are true

也许我应该将此作为一个新问题添加...它与 this question 有关.

最佳答案

我不是专家,也没有阅读太多关于它的内容,但我可以尝试简要解释一下。

所有的 react 变量都有一个叫做依赖的东西。例如,当创建一个新的 ReactiveVar ,创建了一个新的依赖项。 See here .

要从 react 变量中检索值,必须调用一个函数。在那个“getter”中,依赖被指示记住它有一个依赖。例如,see here对于 ReactiveVar.get .

要更改 react 变量的值,必须调用一个函数。在那个“setter”中,通知依赖项发生了一些变化,并且表明依赖于依赖项的所有函数都必须重新运行。例如,see here对于 ReactiveVar.set .

不复杂,对吧?好吧,这只是简单的部分,现在剩下的就是构建使其工作的基础设施:) 这更难解释,也更复杂。

react 性变量本身不是 react 性的;它们必须在 react 性环境中进行评估才能具有反应性。通过调用 Tracker.autorun 创建响应式(Reactive)环境. See here .

当您调用 Tracker.autorun ,您传递给它的函数将在新的 react 环境中执行, react 变量通知的所有依赖项都使用 depend方法将被环境跟踪。当您调用 aDependency.depend , this function将被执行,并且它会将依赖项添加到环境列表中,而不是它所依赖的依赖项。

当 react 变量改变其值时,this function将被执行。它告诉环境它所依赖的 react 变量之一已更改,并使环境中的所有依赖项无效。发生这种情况后,您传递给 Tracker.autorun 的整个函数将重新运行,并跟踪新的依赖项。

你了解大局吗?它的实现比我解释的要复杂一些,但我认为这就是它的工作原理。

关于meteor - Tracker.autorun 如何挑选它的计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26354582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com