请问 vue3 的 onclick 和 @click 有什么区别

3 天前
 zhengfan2016

如题,问了 gemini ,发现答案胡扯的,gemini 说写 onclick 不会触发 vue 响应式( ref 元素修改),但是我实测在 div 上写:onclick 确实能触发响应式修改,所以我有点纳闷,这两种写法到底有什么区别

3758 次点击
所在节点    Vue.js
24 条回复
BruceXu
3 天前
我的 AI 解释得很清楚,可惜没法贴给你.

简单来说,前者是原生 html 的事件,后者是 vue 的事件.和响应式是两码事,都能触发.

一般是推荐用后者,走 vue 指令系统,可以多一些功能.
hengshenyu
3 天前
:onClick 吧? vue 支持将事件已 props 的形式传递(声明也是),onXxx = @xxx
jspatrick
3 天前
在 jsx 或 tsx 里只有 onClick 可以用,@click 是 onClick 的简写,vue 的 template 里一般用简写,响应式只跟定义的响应式变量有关,跟函数如何绑定无关,任意函数都可以触发响应式
crocoBaby
3 天前
@click 会多一些修饰符的用法,例如一次触发,禁用默认事件等等
mengdodo
3 天前
你不用 vue 且纯 html 也不加载 javascript 的情况下也能用 onclick ,但是 @click 只能 vue 下,懂了吧
kakakakaka8889
3 天前
没啥区别啊,@click 只是一个语法糖就是简化的 onClick 写法而已
abc1310054026
3 天前
FakerLeung
3 天前
楼上叽里咕噜说啥呢,怎么扯到 jsx 上了

:onclick 就是原生 html 的 onclick="" 的绑定方式 --> 所有原生属性都可以通过 :xxxx 来绑定
@click 是 vue 的 :onclick 的语法糖,同时支持多个修饰符,可以快速实现一些功能,如 @click.prevent
battlefield
3 天前
zhengfan2016
3 天前
@hengshenyu 这个是在 vue 的文档的哪里啊,我好像没在文档看到这个,我能看到的就是 @click 是 v-on:click 的语法糖 https://cn.vuejs.org/guide/essentials/event-handling.html#listening-to-events
94
3 天前
好难猜啊,为什么这些可以用 `v-bind` 绑定的事件都叫 [事件处理器属性]( https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Attributes#事件处理器属性) 呢。

- [#其他事件监听器机制 | 事件介绍 - 学习 Web 开发 | MDN]( https://developer.mozilla.org/zh-CN/docs/Learn_web_development/Core/Scripting/Events#其他事件监听器机制)
shakukansp
3 天前
@zhengfan2016 渲染函数 & jsx 章节
v-on 的说明

以 on 开头,并跟着大写字母的 props 会被当作事件监听器。比如,onClick 与模板中的 @click 等价
DICK23
3 天前
vue 上应该是一致的,solidjs 中这两个写法一个是原生事件,一个是合成事件
xiaoxi123
3 天前
还是 微优易 黑魔法多啊🤔
rich1e
3 天前
其实楼上有几位的回答,基本都对上了,总结一下就是:

@click 是 Vue 封装的指令,是特有的语法糖。

- 在 .vue 文件的 <template> 里面直接使用;
- @click 也可以写作 “v-on:click”;
- @click 内部还封装了修饰符,e.g. '@click.stop' / '@click.once' 等等;

onclick 属于 HTML 规范,跟 Vue 没关系。即便没有 Vue ,onclick 也可以工作。

多说一句,onclick 不是 onClick 。

如果想在 Vue 里面使用 onClick ,一般是指使用 jsx 编写代码,文件后缀通常为 jsx/tsx 。

当然,.vue 文件也可以写 jsx ,需要声明 `<script lang="jsx">` 或者 `<script lang="tsx">`。

PS:JSX (JavaScript XML) 是 JavaScript 的一种语法扩展,它允许你在 JS 代码中写出类似 HTML/XML 的结构化标记。
Wanex
3 天前
没区别,@click 就是 onclick 的语法糖
tog
3 天前


一个是原生的,一个是 vue 封装的

估计好多人都没写过原生 html css js 吧。
Ketteiron
3 天前
我有个不相关的问题,这位老哥会被疯狂 @吗?
https://ex.noerr.eu.org/member/click
superedlimited
3 天前
@Ketteiron 看上面都没啥,看到这里绷不住了😂
shakaraka
3 天前
@Ketteiron #18 他很久没上线了 hhhh

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1179892

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX