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

李元秋*_*李元秋 14 javascript svelte

let c = 0;
$: console.log(c);
Run Code Online (Sandbox Code Playgroud)

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

因为c$指令中按字面使用,所以这个语句可以对c.

但是如果我只是想什么console.log('yes')时候c改变呢?

let c = 0;
$: console.log('yes');
Run Code Online (Sandbox Code Playgroud)

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

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

let c = 0;
function log() {
  console.log(c);
}
$: log();
Run Code Online (Sandbox Code Playgroud)

log()对 也没有反应c

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

李元秋*_*李元秋 15

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

推特线程的屏幕截图,请参见下面的链接。

链接到线程:https : //twitter.com/liyuanqiu/status/1149235193296773122

  • 这样做的一个大问题是它不会公开以前的值,因此这将在页面实例化以及用户触发的更新时触发。 (2认同)

2ph*_*pha 9

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

let c = 0;
$: if (c) {
    console.log("yes");
}
Run Code Online (Sandbox Code Playgroud)

我不是 100% 确定这是否是正确的方法。
希望里奇·哈里斯能插话,正如我想知道的那样。

  • 您可以使用更短的语法,例如 `$: c ? console.log(是):null;` (2认同)
  • 这种方法的一个问题是,如果您希望该代码在每次更改时运行,包括从非零到零的更改。当值变为 0(或任何其他虚假值)时,“$: if()”方法将不会运行。 (2认同)