在 svelte 中,如何在变量更改时“console.log('yes')”?

In svelte, how to `console.log('yes')` when a variable changed?

let c = 0;
$: console.log(c);

如果我们想在c改变的时候打印它的值,可以像上面这样写

因为c字面意思是用在$指令中,所以这个语句可以对c.

起反应

但是如果我只想在 c 更改时 console.log('yes') 怎么办?

let c = 0;
$: console.log('yes');

显然,语句 console.log('yes')c 没有反应。

此外,如果我仍然console.log(c)但将其放入函数中:

let c = 0;
function log() {
  console.log(c);
}
$: log();

log()c 也没有反应。

那么,如果响应式代码不包含我想要响应的变量,我该怎么办?

你可以这样做:

let c = 0;
$: if (c >= 0) {
    console.log("yes");
}

我最近一直在玩 svelte,需要在 属性 更改时调用一个函数。
在 Vue 中,您可以使用 watch 来完成,但我在 Svelte 中找不到等效项。
在我的项目中是这样做的:

let c = 0;
$: if (c) {
    console.log("yes");
}

虽然我不是 100% 确定这是否正确。
希望 Rich Harris 能在这里插话,我想知道。

我在推特上问过,答案是:

Link 至主题:https://twitter.com/liyuanqiu/status/1149235193296773122

最好的方法是使用一个函数来检测值何时发生变化看看这个例子Variable watcher with svelte

如果你只是在你想做的任何事情中使用变化的变量,它也有效:

let c
$: if (condition) console.log(c)