You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中如何避免向函数传递ref时自动解包?

解决Vue模板中传ref自动解包的问题

直接用箭头函数包裹事件回调,就能把原始ref传进方法里:

修改模板代码:

<input v-model="day" class="border p-2" @blur="() => pad(day)" />

此时pad方法里拿到的day就是原始的ref对象,直接修改day.value就能同步更新数据:

const pad = (day) => {
  // 现在day是ref引用,可直接修改value
  day.value = day.value.padStart(2, '0');
}

为什么原来的写法会自动解包?

Vue模板中直接访问ref变量时,会自动解包成它的value值,所以@blur="pad(day)"相当于把day.value传进了方法,而非ref本身。用箭头函数的话,是在组件setup的上下文里直接引用原始的ref变量,不会触发模板的自动解包逻辑,自然就能拿到ref对象。

另一种方案:把ref放进reactive对象

如果不想用箭头函数,也可以把ref包裹在reactive对象里,因为reactive对象中的ref不会被自动解包:

import { ref, reactive } from 'vue';

const form = reactive({
  day: ref(null)
});

模板调整为:

<input v-model="form.day" class="border p-2" @blur="pad(form.day)" />

这样pad方法里拿到的同样是原始ref,可直接修改day.value。

内容的提问来源于stack exchange,提问作者panthro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:04:59