From cd9d697438079f5f9fb1451c4c12411344917f17 Mon Sep 17 00:00:00 2001 From: tycho Date: Thu, 10 Oct 2024 21:22:32 +0800 Subject: [PATCH] fix(runtime-dom): prevent unnecessary updates in v-model checkbox when value is unchanged --- packages/runtime-dom/src/directives/vModel.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 5a27b245a66..ab44d411872 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -160,7 +160,7 @@ export const vModelCheckbox: ModelDirective = { function setChecked( el: HTMLInputElement, - { value }: DirectiveBinding, + { value, oldValue }: DirectiveBinding, vnode: VNode, ) { // store the v-model value on the element so it can be accessed by the @@ -173,7 +173,10 @@ function setChecked( } else if (isSet(value)) { checked = value.has(vnode.props!.value) } else { - checked = looseEqual(value, getCheckboxValue(el, true)) + checked = + value === oldValue + ? el.checked + : looseEqual(value, getCheckboxValue(el, true)) } // Only update if the checked state has changed