请问在绑定事件时如何避免被转换成箭头函数 #8030
Replies: 5 comments 3 replies
-
无法避免。 |
Beta Was this translation helpful? Give feedback.
-
Why you need to avoid this trasnform |
Beta Was this translation helpful? Give feedback.
-
好像也没有什么影响,如果一定要去掉的话,敲完click之后,手速快一点,就可以不出现了。 |
Beta Was this translation helpful? Give feedback.
-
如果你说的是这个话, 那么对你代码没有任何影响, 提示框上也有关闭这个的方法 |
Beta Was this translation helpful? Give feedback.
-
我知道你说的是什么意思 1. 我猜你只是觉得这个显示很烦人这个是volar插件的功能,如果你想关闭显示的话你可以在 vscode
2. 你想避免编译时转换实际上vue在这个位置简化了你的代码
一个基本的监听,它可能是这样的 <script setup>
function handleClick(){
}
</script>
<template>
<div @click="handleClick"></div>
<!-- 编译后可能是这样的
{
onClick: $setup.handleClick
}
-->
</template> 同样的如果你需要传入一个值的话,你可能会这么写 <script setup lang="ts">
const list = ref([
{ id: 0, text: "0" },
{ id: 1, text: "1" },
]);
function handleClick(id: number) {}
</script>
<template>
<!-- 以下方二种写法表现上应该是一样的 -->
<!-- 写法一 -->
<div v-for="item in list" :key="item.id" @click="handleClick(item.id)">
{{ item.text }}
</div>
<!-- 编译后可能是这样的
{
onClick: ($event) =>$setup.handleClick(item.id)
}
-->
<!-- 写法二 -->
<div v-for="item in list" :key="item.id" @click="() => handleClick(item.id)">
{{ item.text }}
</div>
<!-- 编译后可能是这样的
{
onClick: () =>$setup.handleClick(item.id)
}
-->
</template> 至于如何避免添加 你的需求可能是这样的 function createHandleClick(id: number) {
//you logic 1
return ()=>{
//you logic 2
}
} 当然上面代码可能是没必要的,因为这只是一个假设 那么如何解决这个问题呢 <script setup lang='ts'>
const cacheList: Record<string|number,any> = {}
function getHandleClick( id:number ){
return cacheList[id] || (cacheList[id] = createHandleClick(id))
}
</script>
<template>
<div v-for="item in list" :key="item.id" @click="() => getHandleClick(item.id)">
{{ item.text }}
</div>
</template> 你可能觉得上面写法相当麻烦,没事你可以抽离逻辑 const cacheList: Record<string|number,any> = {}
function cache(key:string,fn:()=>any){
return cacheList[key] || (cacheList[key] = createHandleClick(id))
}
function getHandleClick( id:number ){
return cache(String(id),()=>createHandleClick(id))
} 其实我的解答不需要这么复杂
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
@click="useThrottleFn(clickFn, 500)"
会被转换成@click="$event=>useThrottleFn(clickFn, 500)"
,请问如何阻止这种转换发生。
https://sfc.vuejs.org
Beta Was this translation helpful? Give feedback.
All reactions