无法理解效果函数:加速、减慢Svelte5文档中的示例

问题描述 投票:0回答:1

Svelte5引入了

effect
功能。文档页面上有一个简单计数器的示例,其中包含使用
setInterval
函数增加/减少间隔的选项。

这是代码:

<script>
    let elapsed = $state(0);
    let interval = $state(1000);
  
    $effect(() => {
        const id = setInterval(()=>{
            elapsed += 1;
        }, interval)
    
    });
    
</script>

<button onclick={() => interval /= 2}>speed up</button>
<button onclick={() => interval *= 2}>slow down</button>

<p>elapsed: {elapsed}</p>

当我们点击

speed up
按钮时,间隔就会更新,新的计数器运行得很快。

但是,当我们点击

slow down
按钮时,间隔会更新,但速度不会降低。

文档页面给出的解释如下:

那是因为当 效果更新。我们可以通过返回清理函数来解决这个问题:

现在的问题是,当我们不清除旧的间隔时,

speed up
也应该不起作用。

为什么会出现

speed up
起作用但
slow down
不起作用的情况,而两者都会导致状态变化,即
interval
值。

svelte svelte-5
1个回答
0
投票

您只是添加了额外的间隔,因此最终会出现重叠的更新。添加更多此类更新只会提高更新速度。

删除现有的更新间隔是减慢速度的先决条件。

© www.soinside.com 2019 - 2024. All rights reserved.