最近是接了一个项目,用ArkTs写一个app。这是我用ArkTs写的第一个项目,当中踩了很多坑也发现了各种问题,在完成以后决定写一个帖子来分享一下。
一、为什么不选Stage模型
Stage和FA的区别到底是什么呢,简单点理解就是Stage模型适合分布式,但问题在于,Stage太新了导致文档都不全,我一开始选择的是api9+Stage模型,然后发现我连开启http的那段代码怎么添加到配置文件中都不知道,找遍了文档只有fa模型的……于是果断新建了一个项目,改成了api8+FA模型,所以,如果你对于分布式这种没有太多追求的话,还是求稳比较好
二、文件上传问题
这个是我遇到的最头疼的问题,这里有六个坑
1. 不要相信官方demo,官方demo中是有一个明显错误的,那就是header是json格式而demo中是string格式,所以运行的时候会报错
2. 官方文档里提到:
要上传的文件列表。请使用 multipart/form-data提交
所以看到这个的第一反应就是在header里要加上content-type,但是一看官方文档中的示例代码也没有加,实际上这个是无所谓的
3. 鸿蒙这里文件上传,data和file都是数组格式,即多文件上传,没有单文件上传的方案,后端接口这里要根据情况进行修改的
4. 目前实测后端php是用不了的,java和python都可以正常,php无论用哪种接受请求的方法,都拿不到任何请求参数,就更不用提上传图片了,那么如果服务器是php环境的咋办呢,我最后的方案是花钱请大佬搞了个中间件解决的
5. 在文档和官方demo中,你会发现上传的文件路径都是internal的,然而你通过媒体库或者其他方式选择文件以后……居然格式都是dataability的,然后通过检索文档,又会发现arkts并没有接口可以进行两种格式的转换……实际上两种格式都可以进行上传
6. 拿不到后端返回的数据,文件上传是否成功只能通过比较“文件大小”和“上传大小”这两个数据
三、网络请求后回调问题
通过http或者request接口,这两个涉及到网络的接口,在完成操作调用回调函数时(包括使用promise方案),如果涉及到prompt、router这两个(其他的没试过),会报错,提示can not get delegate.,举个例子,比如说在完成登录以后,想进行一个“登录成功”的提示,并跳转到首页,你会发现是无法完成的,这是一个bug不是坑了。对此目前的解决办法是,在发起请求后,搞一个定时器,0.5秒后去判断从接口中返回的数据后,再去执行对应操作,即假定0.5秒内,已经完成了网络请求。这是一种人工添加异步的操作……
四、轻量级存储在应用刚打开的时候无法获取数据
第一个页面,在onpageshow或者abouttoapear时,我想去通过getsync获取数据,判断用户是否登录过,但是很遗憾,虽然getsync是一种同步的方式,按理说是能获取到的,但是实测无法获取,有两种解决方案,要么是在这里加一个定时器,比如0.1秒后再执行参数获取,或者我目前就是干脆全部用promise套了一层,全写成异步的,也可以成功。
五、textinput和textarea的焦点问题
如果在一个页面中,有两个或以上的输入表单,当你两个都点了一下以后,你会发现每一个上面都有蓝色的光标在跳动,即两个都似乎获得了焦点,这个问题目前我不知道解决方法
六、文件选择问题
当你需要上传一张图片的时候,你可以调用mediaLibrary.getMediaLibrary().startMediaSelect这个接口,然而,这个接口目前无法区分你选择的是图片还是视频,事实上,这一点官方在文档里也是承认的,type只能填media,又因为返回的是dataability的格式,没有文件后缀……
七、页面级状态变量
我整理了一下几个原则:
1. 如果这个变量,是一个固定的数据,或者说变化不会引起任何ui渲染的,那么可以在export外面定义一个var……
2. 如果这个变量,仅在本组件内有效,而且变化以后会引起ui重新渲染,即绑定在ui上的,那么用@State
3. 如果这个变量,要传递给子组件,且子组件内,这个变量改变了以后,对父组件没影响的,那么父子都用@State
4. 如果这个变量,要传递给子组件,且子组件内,这个变量改变了以后,也要同时去刷新父组件的ui的,那么父组件里用@State,子组件用@Link,但是父传子的时候要写成$变量名
5. 如果你觉得写类型麻烦,就直接用any
八、屏幕属性的单位问题
有这样一个需求,就是把一个元素固定在屏幕右上角,那么有两种方法,一种是x设置为100%,然后设置元素的markAnchor,还有一种方案呢,就是获取屏幕的宽度,减掉元素宽度作为x,但是要注意的是,通过display拿到的宽度,单位是px,不是默认的基准单位vp
我觉得目前鸿蒙对我们这样普通开发者来说,最大的问题有两个:
1. 每个版本的api,不管是8啊9的,都上的太急了,没有经过完善的测试就发布了
2. 文档这块写的不够详细,并且感觉有多个版本一样,需要统一一下
任何一个新事物的发展都需要过程,但我觉得,鸿蒙得加快脚步了,我已经把手机电脑都换成华为的以表支持了
相关知识
ArkTs api8 开发踩坑记录及解决方案
在花境设计中如何去避免踩坑
养花新手逛花市,只要注意6点,避免踩坑,买到优质花苗
干货分享|避免踩坑!花泥的正确使用方法请查收
八座公园有草坪可以“踩一踩”!“踩”与“不踩”的草坪有何不同
花材备货避免踩坑指南,百分之九十花店老板都不知道的花材渠道!
带更多老广感受“藏韵江南”:西藏林芝市巴宜区举办桃花节推介及踩线活动
2022年受欢迎的10种喜酒:全是名酒嫡系,知道后婚宴选酒不踩坑
鲜花电商服务云平台整体解决方案.ppt
入花坑的大半年回顾
网址: ArkTs api8 开发踩坑记录及解决方案 https://m.huajiangbk.com/newsview105281.html
上一篇: 精选毕业设计实习报告(精选20篇 |
下一篇: 工程毕业实习报告 |