我正在使用RiotJS编写一个表格应用程序,并且我一直遇到与onclick事件相同的问题。几乎每次我尝试使用
<tag onclick={somefunction}>
我的行为非常不稳定。有时它会在页面加载或更新时调用该函数很多次,然后根本不响应点击,有时它会在启动时多次触发。我似乎无法找出问题背后的模式,虽然我注意到它往往是在线函数调用的问题,例如
<tag onclick={console.log("foo")}>
并且参考传递<tag onclick={function}>
的次数较少,尽管两者都有。有没有人经历过这样的事情?如果您需要更多背景信息,请发表评论。
答案 0 :(得分:0)
在Riot中,{}
表达式在安装/更新时进行评估。
这意味着如果{}
内部的内容是函数调用,则每次更新挂载的标记时,它都将被执行,每次对其所在的部分进行求值时。
这与vanilla javascript不同,在点击该东西之前,甚至不会解析onclick。
这可能会导致一些混乱,因为Riot并不总是以你的思维方式解析{}
表达式。复合表达式(具有布尔逻辑||
和&&
等的表达式尤其麻烦。)
在这种情况下,Riot中的onclick
正在寻找一个表达式/函数......它会尝试用标签本身来评估它......换句话说,就是这样:
<button onclick={foobar}>Click me!</button>
Riot会在点击时尝试执行this.foobar()
。
通常,我尝试通过在标记的<script>
部分设置我的方法来利用这一点。这为我的{}
表达式的错误解释留下了很小的空间,并且在脚本部分中将逻辑位移出标记的HTML部分并进入我期望的行为。