Javascript 在svelte中,当变量发生更改时,如何“console.log(';yes';)”?
如果我们想在更改时打印Javascript 在svelte中,当变量发生更改时,如何“console.log(';yes';)”?,javascript,svelte,Javascript,Svelte,如果我们想在更改时打印c的值,我们可以这样写 因为c是在$指令中使用的,所以此语句可以对c作出反应 但是当c被更改时,如果我只想console.log('yes')怎么办 let c = 0; $: console.log(c); 显然,语句console.log('yes')对c没有反应 此外,如果我仍然console.log(c),但将其放入函数中: let c = 0; $: console.log('yes'); log()对c也没有反应 那么,如果反应式代码没有包含我想要反应的变量
c
的值,我们可以这样写
因为c
是在$
指令中使用的,所以此语句可以对c
作出反应
但是当c
被更改时,如果我只想console.log('yes')
怎么办
let c = 0;
$: console.log(c);
显然,语句console.log('yes')
对c
没有反应
此外,如果我仍然console.log(c)
,但将其放入函数中:
let c = 0;
$: console.log('yes');
log()
对c
也没有反应
那么,如果反应式代码没有包含我想要反应的变量,我该怎么办?您可以这样做:
let c = 0;
function log() {
console.log(c);
}
$: log();
我最近一直在玩svelte,需要在属性更改时调用函数。
在Vue中,您可以使用
手表
,但在Svelte中,我找不到一个等价物。在我的项目中,我是这样做的:
let c = 0;
$: if (c >= 0) {
console.log("yes");
}
我不能100%确定这是不是正确的方法。希望Rich Harris能在这里插话,因为我想知道。我在Twitter上问过,答案是:
链接到线程:执行此操作的最佳方法是使用一个函数,该函数可检测值何时发生更改。请看此示例如果您只在想要执行的任何操作中使用更改变量,它也会起作用:
let c = 0;
$: if (c) {
console.log("yes");
}
将
c
从1更改为0不会记录日志…但这是关于javascript中错误值的另一个线程。您的意图是将c
逐字写在$statement中,尽管看起来很奇怪。这是一种解决方法,我们还可以编写console.log('yes'| c)
或c;console.log('yes')代码>,但它们都很难看…我更新了我的答案,加入了0
。如果需要的话,这个if语句也可以调整为包含负值;console.log('yes')
在推特上的@Rich\u Harris看起来并不难看,如果他回答,我会在这里同步。你可以使用较短的语法,如$:c?console.log(是):空代码>感谢您带着答案回来,开始这篇文章以备将来参考。我真的希望这是在苗条的文件概述。哇,这是相当的金块信息。我不会想到在$:
之后使用逗号分隔的语句,这对我来说还是个新鲜事。这是一种有效/更好的操作方式吗?无论何时,只要你认为它在更新状态方面可能会有所不同(因为有时出于某种原因我不这样做,而有时我这样做-这仍然有点神秘)?一个大问题是,它没有暴露以前的值,因此,这将触发页面实例化以及用户触发的更新。
let c
$: if (condition) console.log(c)