我的代码中有一个这样的敲除计算函数
self.TestFunction = ko.computed(function () {
//Some logic
}, self).extend({ rateLimit: 100 });
此函数自动执行,而没有绑定到任何html元素。我想知道其背后的原因。
答案 0 :(得分:2)
我想知道其背后的原因
通常,您使用ko.computed
作为其返回值。 但是,这不是他们的唯一用途。通常,您会看到使用ko.computed
的代码更像是一种将subscribe
转换为多个值的奇妙方式。例如
// Please note, I do *not* recommend these kinds of structures, I'm merely
// showing knockout allows them
const input1 = ko.observable("");
const input2 = ko.observable("");
const input3 = ko.observable("");
ko.computed(function someSideEffect() {
input1();
input2();
input3();
console.log("Some value has changed!");
});
现在,要使敲除能够“运行”登录控制台的副作用,它必须找出其依赖项。通过运行someSideEffect
函数一次。
如注释中所述,pureComputed
属性的工作方式不同。他们仅在请求 own 值后才运行内部函数。
简而言之:
ko.computed
在创建时会运行其内部功能,因为它支持副作用。ko.pureComputed
仅在请求其值时运行一次,在没有依赖项时暂停。