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