javascript 在Svelte中,"on:click“中的”:“如何工作?

ttvkxqim  于 5个月前  发布在  Java
关注(0)|答案(4)|浏览(76)

我正在尝试使用Slelte,并遵循官方教程。在https://svelte.dev/tutorial/reactive-assignments,我被指示使用这行代码:

<button on:click={handleClick}>

字符串
冒号的作用是什么?为什么它不简单地是<button onclick=...
我找到了有关element directive的Slelte API文档,其中提供了在Slelte中的用法示例,但是我仍然不明白这是如何成为有效的JS语法的,或者它是如何转换成这样的。我不明白冒号 * 是如何工作的 *(与理解它的 * 用法 * 分开)。
我可以理解,这是一种为所有DOM事件属性实现单个指令的方法,但它的实际功能对我来说并不那么透明。

xtfmy6hx

xtfmy6hx1#

其他人已经解释了它被编译成JavaScript的要点,所以我将解决这一部分:
为什么不是简单的<button onclick=...
onclick属性是一个现有的HTML属性(你不应该使用)。语义非常不同-当点击发生时,字符串值被评估为JavaScript。这是一个不好的做法,因为你调用的任何函数都必须位于 global 范围内。
on:click是一个Sveltism,它将按钮的单击事件链接到一个 * 本地 * 定义的函数。:是一个通用语法,表示“这是一个 * 指令 * 而不是一个 * 属性 *”-其中“指令”可以表示一个事件处理程序(on:...)、绑定(bind:...)、转换(in:.../out:.../transition:...)等等。

pxiryf3j

pxiryf3j2#

首先要理解的是,Svelte组件中的代码实际上并不是发送到浏览器的结果JavaScript,所以:
我仍然不明白这是如何有效的JS语法
它不是。它被SvelteJS的编译器“编译”成有效的JavaScript。
我没有浏览源代码,但我假设在这种情况下,冒号用于表示事件本身(click)的事件处理程序绑定指令(on)。
对于编译的实际演示:您可以访问REPL并选择“Js输出”选项卡来查看编译后的JavaScript代码。

de90aj5v

de90aj5v3#

在编译步骤之后,苗条的<button on:click ... />变成了一个普通的事件侦听器,用于事件“click”on that button. getEventListeners(elem)将揭示这一点。这就是为什么多个处理程序是可能的,例如<button on:click on:doWhatever... > So,相当于在普通js中添加elem. addEventListeners()。

相关问题