gpt4 book ai didi

javascript - 如何仅在 react 文档的特定字段发生变化时才运行跟踪器计算?

转载 作者:行者123 更新时间:2023-12-03 08:32:29 24 4
gpt4 key购买 nike

当集合文档更改时,我使用 Tracker.autorun 调用 Meteor 应用程序中的函数。跟踪器正在工作,但我只希望它在文档的特定属性更改时运行:

Tracker.autorun(() => {
let _x = Site.MyCollection.findOne(this._id).myProperty;

if (_x) {
this._myMethod(_x);
}
});

我只希望计算在“myProperty”的值更改时无效,但是每当更新集合的任何属性时都会调用它。

在这种情况下,我无法使用 Session 变量,因为 myProperty 的值可能会被另一个连接的客户端更新。

我怎样才能实现这个目标?

最佳答案

嗯,myProperty 不是 react 性的。定义它的对象是。
如果您想保持良好的 react 性,那么您可以使用 ReactiveVar 来存储 myProperty 的值,然后使用计算来更新其值。

var myProperty = new ReactiveVar();

Tracker.autorun(function() {
//Reactivity kicks in with findOne
myProperty.set(
Site.MyCollection.findOne(this._id).myProperty
)
})

然后,您可以在 myProperty 上运行响应式(Reactive)计算。

请注意,虽然上面的代码始终设置 myProperty ,因此似乎每次都会触发 react 性,但它​​实际上会忽略旧值为 ===< 的情况 为新值。
如果您发现这种行为不合需要,您可以强制使注册的依赖项无效:

//'_dependentsById' is an array-like object lacking an iterator, fallback on _
_.each(myProperty.dep._dependentsById,
(dep) => dep.invalidate()
)

关于javascript - 如何仅在 react 文档的特定字段发生变化时才运行跟踪器计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33286734/

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