RiotJS onclick 在加载时触发

RiotJS onclick triggering on load

我正在使用 RiotJS 编写一个 table 应用程序,我一直 运行 遇到与 onclick 事件相同的问题。几乎每次我尝试使用

<tag onclick={somefunction}>

我的行为非常古怪。有时它会在页面加载或更新时多次调用该函数,然后根本不响应点击,有时它会在启动时触发多次。我似乎无法找出问题背后的模式,尽管我注意到它往往是在线函数调用的问题,例如

<tag onclick={console.log("foo")}>

引用传递较少 <tag onclick={function}> 尽管两者都会发生。有没有人经历过这样的事情?如果您需要更多上下文,请发表评论。

在 Riot 中,{} 表达式在挂载/更新时计算。

这意味着如果 {} 中的是一个函数调用,它将在挂载标签更新时执行,每次它所在的部分被评估时。

这与普通的 javascript 不同,在普通的 javascript 中,onclick 甚至在单击该内容之前都不会被解析。

这可能会导致一些混乱,因为 Riot 并不总是按照您的想法解析 {} 表达式。这对于复合表达式(具有布尔逻辑 ||&& 等的表达式)尤其麻烦

在这种情况下,Riot 中的 onclick 正在寻找一个表达式/函数......它会尝试根据标签本身对其进行评估......换句话说,这个:

<button onclick={foobar}>Click me!</button>

Riot 将在单击时尝试执行 this.foobar()

通常,我会尝试通过在标记的 <script> 部分设置我的方法来利用它。这为我的 {} 表达式的误解留下了很小的空间,并将逻辑位从标记的 HTML 部分移出,并移至脚本部分中我期望行为的位置。