uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法
目录
- 前言:升级项目的两种方式
- 步骤
- 一、新建项目 【选择-默认模版】
- 二、修改-pages.json
- 三、补充-缺少的文件
- 四、修改-Main.js
- 按照 [官方文档-vue2升级vue3迁移指南](https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html) 修改
- 五、升级-uni-ui扩展组件的导入方式
- 安装uni-modules Plugins
- 安装方法
- 兼容-手动注册自定义的组件
- 归纳-将所有自定义组件归到components文件中
- 六、兼容-网络层改造
- 兼容-代理模式发生转变
- 兼容-h5端网络请求代理-manifest.json里面配置proxy
- js脚本文件内部是jsx语法的问题
- 兼容-subPackages模块化
- 兼容-子包组件引用失败的问题
- 子包被忽略打包上传的问题
- 七、兼容-Vue3导致的页面渲染问题
- 历史问题-铺货设置界面【扩展属性】死循环
前言:升级项目的两种方式
1、拉取官方一套完整的项目作为地基,将自己的页面拿进去替换
2、新建一个最简单的模版,重新配置依赖项。【技术栈差异项过多时,这个方案最佳,故本文采用这个方案】
步骤
一、新建项目 【选择-默认模版】

二、修改-pages.json
三、补充-缺少的文件
四、修改-Main.js
按照 官方文档-vue2升级vue3迁移指南 修改
1、网络层:app.config.globalProperties.$request = request
五、升级-uni-ui扩展组件的导入方式
安装uni-modules Plugins
1、为什么要使用uni-modules ?官方文档-什么是uni-modules
2、实践表明:
components的方式官方已经不再推荐,继续使用得话只能手动从uni-modules里面的子目录里面复制出来,还会遇到项目不兼容的问题。
比如官方文档更新了某个组件支持什么属性,但是由于项目内引入的组件是老版本,可能就会导致一系列的报错。

安装方法
打开hbuilder之后记得选择项目,被这个坑了好几次了。

兼容-手动注册自定义的组件

示例代码如下:
<script>
// ... existing code ...
import customLink from "@/components/customlink/customlink.vue"; // 确保路径正确
export default {components: {customLink // 添加组件注册},data() {// ... existing code ...
归纳-将所有自定义组件归到components文件中

六、兼容-网络层改造
兼容-代理模式发生转变

兼容-h5端网络请求代理-manifest.json里面配置proxy
"devServer": {"port": 8081,"proxy": {"/CpsWap": {"target": "http://alifen.4k5cs.cn/","changeOrigin": true},"/OrderWap": {"target": "http: //alifen.4k5cs.cn/","changeOrigin": true}}},
js脚本文件内部是jsx语法的问题

兼容-subPackages模块化
在主包中 注册 子包所需的全局网络对象
兼容-子包组件引用失败的问题
现象:

原因:在主包中引用(import)了子包中的资源文件,检查提示中的资源将其修正或移至主包。
子包被忽略打包上传的问题
现象:

原因:上面的问题解决了,这个问题就没有了。
七、兼容-Vue3导致的页面渲染问题
历史问题-铺货设置界面【扩展属性】死循环
现象:

原因:Vue3比Vue2性能更强大的原因,很大一部分原因就是Vue3的代理(Proxy)相比Vue2的Object.defineProperty更加强大,Vue3的Procy可以直接监听整个对象,监听属性的新增和删除,而Vue2需要递归遍历对象的每个属性进行监听,也无法直接监听属性的新增和删除。
导致死循环的代码分析:
watch: {WapExtItems: {handler(newVal) {newVal.forEach((item) => {item.content.forEach((subitem) => {if (subitem.type === "checkbox" && subitem.value.length > 0)this.settingData.ExtensionAttr[subitem.name] = subitem.value.join(",");else this.settingData.ExtensionAttr[subitem.name] = subitem.value;subitem.isShow = true;if (subitem.precondtion) {subitem.precondtion.forEach((conitem) => {if (this.settingData.ExtensionAttr[conitem.name] !== conitem.value) subitem.isShow = false;});}});});},deep: true,},},
解决:将计算逻辑移至computed中进行。
相关文章:
uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法
目录 前言:升级项目的两种方式步骤一、新建项目 【选择-默认模版】二、修改-pages.json三、补充-缺少的文件四、修改-Main.js按照 [官方文档-vue2升级vue3迁移指南](https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html) 修改 五、升级-uni-ui扩展组件的…...
数据重构如何兼顾效率与性能稳定?zStorage 全闪存分布式存储的技术实践与实测数据
点击蓝字 关注我们 zStorage 作为数据库场景下的全闪存分布式存储,除了性能要好,更重要的是要在各种情况下都能保持“稳定”的好。一个高并发的交易型业务数据库,如果出现轻微的IO抖动,就可能造成数据库并发事务提交的排队&#x…...
linux下内存地址数学运算
如下代码计算地址并16字节对齐: char* buffer (char*)malloc(a3 0x1000);unsigned long long tmp (((unsigned long long)buffer 0x10) & 0xffffffffffffff00);char* buf (char*)tmp;假如把地址当作整数,加减程序运算,直接转换是不行…...
A2A + MCP:构建实用人工智能系统的超强组合
构建真正有效的连接型人工智能系统的挑战 如果你正在构建人工智能应用,这种情况可能听起来很熟悉: 你需要特定的人工智能能力来解决业务问题。你找到了完成每个单独任务的出色工具。但把所有东西连接在一起却占据了大部分开发时间,还创建了…...
力扣每日打卡17 49. 字母异位词分组 (中等)
力扣 49. 字母异位词分组 中等 前言一、题目内容二、解题方法1. 哈希函数2.官方题解2.1 前言2.2 方法一:排序2.2 方法二:计数 前言 这是刷算法题的第十七天,用到的语言是JS 题目:力扣 49. 字母异位词分组 (中等) 一、题目内容 给…...
Word处理控件Spire.Doc系列教程:C# 为 Word 文档设置背景颜色或背景图片
在 Word 文档中,白色是默认的背景设置。一般情况下,简洁的白色背景足以满足绝大多数场景的使用需求。但是,如果您需要创建简历、宣传册或其他创意文档,设置独特的背景颜色或图片能够极大地增强文档的视觉冲击力。本文将演示如何使…...
ecovadis评级范围,如何拿到ecovadis评级高分
EcoVadis评级范围及高分策略详解 一、EcoVadis评级范围(四大核心主题) EcoVadis从以下4大维度对企业进行评分,权重因行业而异(如制造业更侧重环境,IT业更关注商业道德): 评估维度具体评估内容…...
掌握 Altium Designer:轻松定制“交换器件”工具栏
在PCB设计过程中,快速交换器件(如电阻、电容、IC等)是提高效率的关键。Altium Designer提供了灵活的工具栏定制功能,让用户可以创建专属的"交换器件"工具栏,将常用操作集中管理,减少菜单切换时间…...
JavaScript的JSON处理Map的弊端
直接使用 Map 会遇到的问题及解决方案 直接使用 Map 会导致数据丢失,因为 JSON.stringify 无法序列化 Map。以下是详细分析及解决方法: 问题复现 // 示例代码 const myMap new Map(); myMap.set(user1, { name: Alice }); myMap.set(user2, { name: B…...
【C++ Qt】信号和槽(内配思维导图 图文并茂 通俗易懂)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本章是Qt中的第三章,也是我们理解Qt中必备的点 信号槽,它本质由信号和槽两个来实现,其中将细致的讲述如何自定义信号…...
突破AI检测边界:对抗技术与学术伦理的终极博弈
随着GPT-4、Claude等大模型的文本生成能力突破人类写作水平,AI检测工具与对抗技术的博弈已进入白热化阶段。本文深入解析基于对抗训练的文本风格混淆网络如何突破GPTZero最新防御体系,探讨OpenAI多模态内容溯源系统引发的技术升级,并针对学术…...
从零开始构建微博爬虫:实现自动获取并保存微博内容
从零开始构建微博爬虫:实现自动获取并保存微博内容 前言 在信息爆炸的时代,社交媒体平台已经成为信息传播的重要渠道,其中微博作为中国最大的社交媒体平台之一,包含了大量有价值的信息和数据。对于研究人员、数据分析师或者只是…...
Git -> Git 所有提交阶段的回滚操作
已经修改但没有暂存的回滚 修改状态单个文件所有文件说明已修改未暂存git checkout -- 文件路径git checkout -- .丢弃工作区修改 已经暂存但没有提交的回滚 修改状态单个文件所有文件说明已暂存未提交git reset HEAD 文件路径 -> git checkout -- 文件路径git reset HEA…...
三餐四季、灯火阑珊
2025年4月22日,15~28℃,挺好的 待办: 教学技能大赛教案(2025年4月24日,校赛,小组合作,其他成员给力,暂不影响校赛进度,搁置) 教学技能大赛PPT(202…...
【Java面试笔记:基础】8.对比Vector、ArrayList、LinkedList有何区别?
在Java中,Vector、ArrayList和LinkedList均实现了List接口,但它们在线程安全、数据结构、性能特性及应用场景上存在显著差异。 1. Vector、ArrayList 和 LinkedList 的区别 Vector: 线程安全:Vector 是线程安全的动态数组&#…...
麒麟V10安装MySQL8.4
1、下载安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解压 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安装MySQL 3.1、卸载mariadb rpm -qa | grep mariadb rpm -e m…...
基于javaweb的SSM+Maven教材管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
C语言教程(十二):C 语言数组详解
一、引言数组的基本概念 数组是一组具有相同数据类型的元素的集合,这些元素在内存中连续存储。通过一个统一的数组名和下标来访问数组中的每个元素。使用数组可以方便地处理大量相同类型的数据,避免为每个数据单独定义变量。 二、一维数组 2.1 数组的…...
osxcross 搭建 macOS 交叉编译环境
1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...
Zookeeper 概述
Zookeeper 概述 Zookeeper 概述与使用指南什么是Zookeeper?Zookeeper的主要作用使用Zookeeper的框架典型使用场景1. 配置管理2. 分布式锁3. 服务注册与发现 Zookeeper的缺陷与其他协调服务的比较实际案例:Kafka使用Zookeeper最佳实践 Zookeeper 概述与使…...
智能座舱测试内容与步骤
智能座舱的测试步骤通常包括以下环节: 1.测试环境搭建与准备 • 硬件需求分析:准备测试车辆、服务器与工作站、网络设备以及传感器和执行器模拟器等硬件设备。 • 软件需求分析:选择测试管理软件、自动化测试工具、模拟软件和开发调试工具等。…...
NineData 与飞书深度集成,企业级数据管理审批流程全面自动化
NineData 正式推出与飞书审批系统的深度集成功能,企业用户在 NineData 平台发起的审批工单,将自动推送至审批人的飞书中,审批人可以直接在飞书进行审批并通过/拒绝。该功能实现跨系统协作,带来巨大的审批效率提升,为各…...
mockMvc构建web单元测试学习笔记
web应用本来需要依靠tomcat这个环境运行 现在用mockMvc是为了模拟这个web环境,简化测试 什么是mock(模拟) 模拟对象---mock object是以可控方式模拟真实对象行为的假对象,通过模拟输入数据,验证程序达到预期结果 为什么使用mock对象 因为…...
【白雪讲堂】[特殊字符]内容战略地图|GEO优化框架下的内容全景布局
📍内容战略地图|GEO优化框架下的内容全景布局 1️⃣ 顶层目标:GEO优化战略 目标关键词: 被AI理解(AEO) 被AI优先推荐(GEO) 在关键场景中被AI复读引用 2️⃣ 三大引擎逻辑&#x…...
Windows7升级Windows10,无法在此驱动器上安装Windows
一、现象描述 台式机工作站,从Windows7升级Windows10,采用MediaCreationTool_22H2制作U盘启动盘,安装系统遇到问题如下: 二、原因分析 是由于硬盘格式不是GPT硬盘,而Windows系统只能安装到GPT硬盘上,所以…...
Element Plus表格组件深度解析:构建高性能企业级数据视图
一、架构设计与核心能力 Element Plus的表格组件(el-table)基于Vue 3的响应式系统构建,通过声明式配置实现复杂数据渲染。其核心设计理念体现在三个层级: 数据驱动:通过data属性绑定数据源,支持动态更新与…...
Idea创建项目的搭建
1、普通java项目 如果没有project SDK去new,默认在C:\Program Files\Java\jdk1.8.0_261 输入项目名称和项目路径 点击完成,即创建好一个普通的Java项目。 2、普通JavaWEB项目 目录中没有WEB-INF文件可以直接从tomcat中粘贴过来 D:\apache-tomcat-8.5.…...
drupal7可以从测试环境一键部署到生产环境吗
Drupal 7 本身并没有“内建的一键部署功能”,所以“从测试环境一键部署到生产环境”不能完全自动化完成,尤其是涉及数据库、配置和文件系统时。但你可以通过一些工具和方法实现接近“一键部署”的效果 ✅ 🚧 为什么不能直接一键部署ÿ…...
Springboot 集成 RBAC 模型实战指南
RBAC 模型核心原理 详情可参考之前的笔记:https://blog.csdn.net/qq_35201802/article/details/146036789?spm1011.2415.3001.5331 RBAC 定义与优势 RBAC(Role-Based Access Control,基于角色的访问控制)** 是一种通过角色关联…...
KWDB 创作者计划 KWDB(KaiwuDB)系列专题 (四) KWDB核心概念解析:多模、时序与分布式
KWDB核心概念解析:多模、时序与分布式 1. 引言 KWDB(KaiwuDB)作为一款面向AIoT(人工智能物联网)的分布式多模数据库,以其独特的多模融合设计、高效时序处理能力和灵活的分布式架构,满足了物联网场景下复杂数据管理的需求。要深入掌握KWDB,理解其三大核心概念——多模…...
