HarmonyOS 3.1/4.0应用升级到HarmonyOS NEXT改动点
在 "2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)"(https://coding.imooc.com/class/843.html)视频课程中,因为讲师在该课程授课时是使用的HarmonyOS 3.1/4.0应用(API 9),如果部分学员采用了最新的HarmonyOS NEXT API,此时就会遇到API兼容性的问题。
本文整理了从HarmonyOS 3.1/4.0应用升级到HarmonyOS NEXT(Developer Preview2)改动点。
获取路由参数
// 从路由参数中获取用户信息 let userInfo: UserInfo = params[`${Constants.PARAM_LOGGED_USER_INFO_KEY}`];
报错:Indexed access is not supported for fields (arkts-no-props-by-index) <ArkTSCheck>
不应该通过索引来访问对象
错误原因:在 HarmonyOS Next 开发中,如果你不能使用 TypeScript 或 JavaScript 的标准库,包括 hasOwnProperty 和通过 []
或 .
获取对象的属性值,那么你需要寻找其他方法来将对象转换为 Map。由于 ArkTS 对动态特性的限制,你可以考虑使用递归函数来遍历对象的属性,并将它们添加到 Map 中。
改为
// 从路由参数中获取用户信息 let userInfo: UserInfo = new Map(Object.entries(params))[`${Constants.PARAM_LOGGED_USER_INFO_KEY}`]; router.replaceUrl({ url: 'pages/Index', // 通过路由参数,传递待发布的视频数据 params: { [`${Constants.PARAM_PUBLISHED_VIDEO_INFO_KEY}`]: this.selectedVideoInfo } })
报错:Objects with property names that are not identifiers are not supported (arkts-identifiers-as-prop-names) <ArkTSCheck>
改为
router.replaceUrl({ url: 'pages/Index', // 通过路由参数,传递待发布的视频数据 params: { 'publishedVideoInfo': this.selectedVideoInfo } })
设置应用全局的UI状态存储
AppStorage.SetOrCreate('UserInfo.username', userInfo.username);
改为
AppStorage.setOrCreate('UserInfo.username', userInfo.username); let username: string = AppStorage.Get('UserInfo.username');
改为
let username: string = AppStorage.get('UserInfo.username') as string;
不要导出@Entry
[@Entry](https://my.oschina.net/u/4127701) [@Component](https://my.oschina.net/u/3907912) export struct VideoPublishPage { [@Entry](https://my.oschina.net/u/4127701) [@Component](https://my.oschina.net/u/3907912) struct VideoPublishPage {
Property 'videoId' has no initializer and is not definitely assigned in the constructor.
export class VideoInfo { // 视频ID videoId: number; Property 'videoId' has no initializer and is not definitely assigned in the constructor.
改为
export class VideoInfo { // 视频ID videoId: number = 0;
参考资料
- 本文同步至:https://waylau.com/changes-upgrade-from-3-1-4-0-to-harmonyos-next-developer-preview2/
- 《跟老卫学HarmonyOS开发》 开源免费教程,https://github.com/waylau/harmonyos-tutorial
- 《鸿蒙HarmonyOS手机应用开发实战》(清华大学出版社)
- 《鸿蒙HarmonyOS应用开发从入门到精通战》(北京大学出版社)
- "鸿蒙系统实战短视频App 从0到1掌握HarmonyOS"(https://coding.imooc.com/class/674.html)
- 《鸿蒙HarmonyOS应用开发入门》(清华大学出版社)
- "2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)"(https://coding.imooc.com/class/843.html)

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
既要、又要!NJet支持不落盘的Web服务访问记录分析报表了!
NGINX 向云原生演进,All inOpenNJet 1. 背景需求 访问日志是目前web server,proxy最常用的问题跟踪、统计分析的源头。所以尽管由于IO,产生访问日志对系统的的影响很大(据客户的实际反馈,因打开访问日志,系统性能有50%以上的损耗),但在正式的上线环境中应该尽量打开访问日志。然后,产生的日志作为源头,会被输出到ES等统一的日志平台进行分析处理,或被各式各样的日志分析工具进行分析。比如一款开源的基于c编写的日志分析工具goaccess,就可以既在命令行下使用,也提供HTML格式的报表。 其产生的报表可以有命令行的: 或 html格式的: 以上图片来源于:https://goaccess.io/ 当然,NJet针对落盘影响性能这个问题也做了很多优化,比如: 动态配置访问日志,仅仅在某个具体的访问url,仅仅在分析故障阶段打开,并在分析定位完成后尽快关闭; 动态输出日志到远端,避免磁盘IO的影响。但这个优化是减少了IO,也少输出了记录,影响了用户分析自己的网站的完整性。 在分析了goaccess的代码后,我们觉得,可以把NJet和goaccess结合起来,由N...
- 下一篇
超越流水线,企业研发规范落地新思路
作者:子丑 内容大纲: 1、研发规范≠流程约束 2、自动化工具→研发规范载体 3、研发规范在工具上的落地示例 4、研发规范的选型方法与常见实践 研发规范≠流程约束 这个故事特别适合研发规范的场景,我们要避免成为把猫绑在柱子上的信众。而要做到这一点,我们先要了解什么是研发规范。 当我们在谈论研发规范时,我们在谈论什么? 有些团队谈起研发规范,会列一个大纲,并制定详尽的规章制度,这些规章制度对他们而言就是研发规范。 这个大纲可能是这样的: 需求管理规范 代码管理规范 制品管理规范 测试管理规范 生产发布规范 安全研发规范 还有些团队会用如下这种图来描述需求从提出到开发到交付的整个过程,准入准出要求、会涉及到哪些人等,他们以此来描述研发规范。 显然,当我们以第 2 种方式描述研发规范的时候,我们能更好地把控研发过程,能够以终为始地去看研发规范。 研发规范的目标、执行挑战 研发规范是跟随软件工程的产生而产生的。随着软件和团队的规模逐渐扩大,软件危机随之产生,为确保软件按时、按质地交付,需要利用软件工程的思路来解决软件危机,由此产生了研发规范。 因此,研发规范的目标是保障软件按时、按质地交付。 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Linux系统CentOS6、CentOS7手动修改IP地址
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8