【问题标题】:Assignment into a variable used as an event handler is not reactive:分配给用作事件处理程序的变量不是反应式的:
【发布时间】:2019-10-06 06:39:48
【问题描述】:

在以下代码中(为简洁起见,省略了onMount),counthandler 属性都用于 h1 元素。 handler 变量在 3 秒后更新;但它不会改变元素的行为。

在处理程序的定义需要动态更改的情况下,最好的方法是什么?

<script>
let count = 0;
let handler = () => {};

function update() {
    if (count >= 3) {handler = () => {count = 0;}}
    count++;
}
setInterval(update, 1000);
</script>

<h1 on:click={handler}>{count}</h1>

https://svelte.dev/repl/cb0469ba5d8241e382677ad95a659b76?version=3.12.1

【问题讨论】:

标签: javascript dom-events svelte


【解决方案1】:

哇,这很好,我希望您的代码能够正常工作!当有响应式更新时,看起来 Svelte 没有更新 on:click 绑定,这很奇怪!

作为一种变通方法,您可以为on:click 提供一个匿名函数,该函数调用动态更改的函数,如下所示:

<h1 on:click={() => handler()}>{count}</h1>

这似乎可以解决问题。这是updated REPL

【讨论】:

  • 是的,如果我有另一个调用处理程序的函数(在我的真实测试中,调用函数必须首先检查处理程序是否未定义)。这使它工作,但有点......不令人满意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多