升级Vue3.4+版本,ant-design-vue 3.x 版本的Modal函数方式无法关闭问题

升级Vue为v3.4.x出现问题

当前Vue版本为3.3.x,想升级Vue到3.4+版本,但升级后,ant-design-vue 3.x 版本的Modal函数方法有问题,如Modal.confirm打开后,取消确认按钮回调能执行,但是弹窗却无法关闭

于是到github的ant-design-vue库找的相关issue #7375 #7239

ant-design-vue团队合并了pr并关掉了相关issue,但是修复代码只在4.x版本后,3.x仍存在该问题。相关修复如下:

而升级ant-design-vue 4.x是破坏性升级,涉及到很多地方变动,没有办法升级。所以当时的解决方案是:Vue版本固定在v3.3,ant-design-vue版本固定为v3.x

但这样就不能用Vue 3.4的新特性了

升级Vue为v3.5.x解决问题

因为还是想用Vue3.4的新特性,有空时去看ant-design-vue的issue,看会不会针对3.x版本修复这一问题,但应该是不会有的,不过发现有条评论说"Vuev3.5.13修复了这一问题"

然后就去升级试试,发现是v3.5.0修复了,升级v3.5.x后Modal.confirm弹窗顺利关闭了(不确定升级为v3.5.x是否会有其他问题,升级后需要在测试环境多多运行验证)

v3.5是怎么解决的?

好奇v3.5是怎么解决的,就去github上看Vue的相关issue,看到有人提到和ant-design-vue相关问题,不过看v3.5.0更新日志并没有提到这一issue,也没有找到其他相关更新说明

就根据ant-design-vue的修复代码,推测是Vue v3.4被改动的update方法,在v3.5又改回来了

然后就去看Vue源码,推测相关改动(没有完整看完源码,是凭借关键字和代码提交时间推测的)

看下图代码改动,可以看出3.4版本判断了effect.dirty才去执行的,而3.4前和3.5后都是没有判断的。3.5后增加了jobrunIfDirty执行,而update改回为无判断执行

左边为3.4后提交的,右边为3.5后提交的

左边为3.4前提交的,右边为3.4后提交的

升级后的新特性

vue3.3升级到vue3.5的新特性,具体可看更新文档

3.4更新文档翻译版:https://juejin.cn/post/7317809451187208218?searchId=20250902174214673E19C04CEE8A1C2F50

3.5更新文档翻译版:https://juejin.cn/post/7410316451962142731?searchId=20250902175718A2E7B5955736D621881D

其中比较有用的api

defineModel()

3.4新增defineModel(),更方便地定义双向绑定,具体可看文档

在之前的版本,双向绑定是通过definePropsdefineEmits,有时再结合使用vueuse中的useVModel完成。

在3.4就可以直接使用一个defineModel()更快速的实现了,其底层辅助函数是useModel()

Props 解构默认值

3.5+新增Props解构默认值,更方便地设置默认值,具体可看文档

在之前的版本,props解构的写法并不能设置默认值,所以是用withDefaults设置默认值。

在3.5+后就可以直接以解构的方式设置来默认值,且仍可以保留响应式。

如果担心用解构写法后不好区分props,可以在Vue (Official)插件设置开启相关提示

注意:升级3.5后withDefaults仍可使用,但不要在同一个props同时使用解构和withDefaults

useTemplateRef()

3.5+ 新增useTemplateRef()获取模板引用

在之前的版本,使用与静态 ref 属性名称匹配的普通引用。

在3.5+后就可以使用useTemplateRef() ,在运行时字符串ID匹配引用,因此支持将动态引用绑定到变化的ID

结合插件的升级,会有模板引用字符串的提示和组件相关提示,开发体验更好

本文博客地址nys013.github.io/blog/update...

相关推荐
2301_322414280414 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
专业程序开发源16 小时前
springbootLivehouse票务系统-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·pygame
leoZ23116 小时前
2026-09-10-静态扫描连错三次-用运行环境当裁判
前端·javascript·vue.js·人工智能·opencv·机器学习·数据挖掘
卓怡学长16 小时前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea
梨涡泥窝19 小时前
JavaWeb——基于 Spring Boot + Vue 的图书管理系统的设计与实现
vue.js·spring boot·后端
huali21 小时前
vue-split-screen:让 Vue Router 的导航轨迹变成两个页面
前端·javascript·vue.js
雪芽蓝域zzs1 天前
第三十六节:keep-alive 页面缓存(Vue3 + 后台管理系统)
前端·vue.js·缓存
边境悍匪1 天前
蜗牛学苑 Java 智能体学习 Day41|ElementPlus 布局、Vue‑Router 登录、Axios 思维导图复盘
java·vue.js·学习
志尊宝1 天前
Vue3 零基础每日笔记(017):事件处理进阶——$event、多事件与事件修饰符全家桶
javascript·vue.js·笔记
Bs_MoneyMagnet1 天前
基于springboot+vue的医疗健康便民服务平台的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring