环境
vue3
ant-design-vue
现象
<a-select
v-model:value="keywords"
:options="[{label: 'option1', value: 1}]"
@change="onChange"
/>
<script setup>
const keywords = ref('')
const onChange = () => {
keywords.value = undefined
}
</script
执行的结果是复选框中仍然是 option1
。
起初怀疑是不是由于类似 chunk update
这种合并批处理的机制,因此增加了一个点击事件。
<a-select
v-model:value="keywords"
:options="[{label: 'option1', value: 1}]"
@change="onChange"
/>
<a @click="onChange">click</a>
<script setup>
const keywords = ref('')
const onChange = () => {
keywords.value = undefined
}
</script
点击click
后,仍然无法清空数据。
分析
由于 @change
自动更新了 value
。但是,如果在 onChange
中更新的 value
会导致无法触发 keywords
的 proxy setter
。
// 如果 onChange 更新了 keywords.value,则不会触发
watch(() => keywords.value, () => {
console.log('change keyword', keywords.value);
});
目前解决方案
通过执行一次新的宏任务。