Vue3 请教’函数引用‘和’函数调用‘的问题

246 天前
 buynonsense
我们来看一下这里:
<el-link @click="isRegister =true;clearRegisterData();">

clearRegisterDate()是一个初始化函数,它是这样定义的:
const clearRegisterData = () => {

registerData.value.username = '';
registerData.value.password = '';
registerData.value.rePassword = '';
}

当我使用 @click="isRegister =true;clearRegisterData();" 函数生效

当我使用 @click="isRegister = true;clearRegisterData;" 函数失效;

当我使用 @click="clearRegisterData"时,函数生效。

我都是使用的函数引用为什么会导致这样两种不同的结果?
1423 次点击
所在节点    Vue.js
15 条回复
cxe2v
246 天前
@click="isRegister =true;clearRegisterData();" 引号内被当成 js 语句执行
@click="isRegister = true;clearRegisterData;" 引号内被当成 js 语句执行
@click="clearRegisterData" 引号内是函数引用
yooomu
246 天前
当你仅仅传入 clearRegisterData ,如果这是一个函数,vue 会传入事件携带的参数并调用。另外两种情况,你传入了一个表达式,但前者你显式进行了函数调用,所以是生效的。而后者并没有,所以结果显而易见
NessajCN
246 天前
首先 onclick 的赋值需要是一个函数,譬如你这里的 clearRegisterData
然后,你可以事先定义好这个函数,譬如 clearRegisterData ,或者用类似定义匿名函数的方法在赋值时候定义赋值的函数,譬如 {isRegister =true;clearRegisterData();}
这样做等价于 const onclick = () => {isRegister =true;clearRegisterData();} onclick=onclick
MackMa
246 天前
buynonsense
246 天前
@cxe2v 恍然大悟,但它这是根据什么来判别被当成 js 语句还是其他的?
chobitssp
246 天前
https://cn.vuejs.org/guide/essentials/event-handling.html#method-vs-inline-detection

@click="isRegister = true;clearRegisterData;"
等同于
()=>{ isRegister = true;clearRegisterData; }
buynonsense
246 天前
@MackMa 这我得好好看一番了
sujin190
246 天前
@buynonsense #5 语法解析啊,jsx 的编译本来就要做 js 的语法解析,语法解析完了自然知道是函数名还是表达式
zangbianxuegu
246 天前
@click="clearRegisterData" -> @click="clearRegisterData()"
Vue 的写法太多,语法太多,语法糖太多……
RabbitDR
246 天前
KisekiRemi
246 天前
@buynonsense 可以看编译后是什么样的
iOCZS
246 天前
要么传递函数,要么传递语句。当然从语法角度讲,应该传递一个函数,语句有点邪路。。。
wangtian2020
245 天前
gitdoit
245 天前
前端就是语法糖太多, 为了简化,一个东西 N 种写法,反而会导致更多的心智负担
buynonsense
240 天前
@RabbitDR 噢!这真是一个好工具,我都不知道

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

https://www.v2ex.com/t/1025499

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

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

© 2021 V2EX