4

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

<tag onclick={somefunction}>

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

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

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

4

1 回答 1

3

在 Riot 中,{}表达式在挂载/更新时进行评估。

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

这与原版 javascript 不同,在原版 javascript 中,在点击该东西之前甚至不会解析 onclick。

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

在这种情况下,onclickRiot 正在寻找一个表达式/函数......它会尝试根据标签本身来评估它......换句话说,这是:

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

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

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

于 2017-08-29T16:56:47.700 回答