Skip to content

常见问题

报:Please specify it explicitly.

  • 解析:这种是表示你在标签上的一些使用的变量没有定类型,或者类型未知,无法确定
  • 解决:给你的变量加类型比如:
vue

v-model="word as string";{{(item as xx).xxx}}

ios插件要求隐私清单

  1. 如果出现google某某插件需要隐私,请升级至1.1.9版本
  2. sdk升级至4.52+

安卓审核权限弹层及请求

  1. 使用某项权限前,请选弹层授权
  2. 使用官方的授权插件请求:https://ext.dcloud.net.cn/plugin?id=16960
  3. 可能的方案:首页可以导航到空白页面,避免授权前调用相关权限违规,再跳回首页.

微信打包,包大小超了?

  1. 检查依赖文件单独放到分包中的page目录下,不要放到插件目录
  2. static图片等放置到服务器上
  3. 打开微信工具,选中页面编辑器,选中代码依懒分析,查看哪些文件太大,需要迁移分包. 我的demo总共120个页面,一共6mb多,也能轻松打包,请大家看看我如何分包的.
  4. static下的一些依赖文件用不到的可以删除,比如ocr,及qr这些依赖用不到可以删除。

我应该如何选择电脑开发uniAPPx

建议使用苹果电脑,目前最便宜的mini m4最低只要3800块,非常适配开发软件,可以解决很多原生开发问题.

IOS使用插件闪退问题

一般来说我提供的ios插件非常稳定,几乎不太可能闪退,出现的原因大概如下:

  1. 权限问题
  2. 插件没打包,或者数据类型问题
  3. 自己离线打包了插件,但对类型和权限,fromeWork库处理不当
  4. 模拟器导致,好多插件没有配置x86 abi,只支持移动端真机,或者支持mac m1/m2系列的arm苹果电脑

微信使用扫码问题

1.1.9开始微信也支持了相册及图片识别二维码了,提供图片路径时请尽量压缩下(我内部默认已经压缩成了500*500),因此外部你提供图片时 请尽量不要太大,且图片要干净点,可以使用我的图片裁剪组件对需要识别的图片裁剪后再给插件识别,会大大提高精度和速度.这个码识别插件不依赖微信,也不依赖第三方 纯offcanvasRender离线识别.Zxing的翻版

web版本相机识别扫码识别问题

建议尽量将相机设置为正方形,且大小不要太大,以免影响识别速度,本次1.1.9较上次版本精度有所提升.

web使用Ocr插件问题

web版本的ocr.js文件较大有1.5mb,首次使用时,加较长时间加载,并且识别速度较慢,精准度还是可以的,与app版本差不多,唯一不同的就是识别慢了点.

微信使用mqtt.js问题

由于uniappx无法编译并复制库文件mqtt.js到编译目录,因此你们在编译或者发布后,需要手动将x-mqttt-s中微信目录里面的mqtt.js复制到对应编译目录中

微信使用图表问题

为了让大家在微信上使用完整的5.6.0全量图表,我决定修改导入方式,建议你把图表页面单独分包到一个包中 然后把百度图表echart.min.js复制到分包的页面中,然后调用组件方法将包对象回填到图表组件.这样就可以让图表单独在一个包中,而不影响整体包的大小 具体见demo中的图表使用方案.

微信组件组件,内容空白问题

由于编译到微信组件表现不一样,如果组件插槽内默认的插槽有数据时,外部直接使用将会空白,正确的做法是完整的写法写组件如

vue
正确的做法:
<x-float-drawer>
	<template v-slot:default="{show,height}">
		这里放你的内容
	</template>
</x-float-drawer>
错误的做法:
<x-float-drawer>
	以往用法.
</x-float-drawer>

底层优化总结

  1. 安卓渲染是先渲染下页,再跳转(这里就要特别注意下页的渲染时间 ,不然跳转卡哈)
  2. 安卓渲染它是分片,分指令数量渲染,如果元素少,但逻辑多,会造成渲染页面次数增加,造成渲染慢
  3. 安卓元素渲染,不是按顺序,是递归一个组件从最深往上,但它这个onMounted触发不是顺序的,而web,ios是顺序的
  4. 安卓和ios安卓的ref元素setup和选项有区别,安卓,web比较能同步得到元素。ios要看页面渲染时长,包括动画时长需要递归内部渲染所有元素,不然有的属性丢失,造成异常混乱
  5. 安卓和ios事件冒泡没对齐,ios的元素的事件无法阻止页面向下滚动的事件冒泡,会让一些手势与scroll混乱
  6. fiexd层级元素或者aboust元素,在安卓或者ios,如果采用了visible,hidn等不在视图外的手段,元素的节点大小直接为0或者大小不固定,不能像web能同步大小。

报canvas,CanvasRenderingContext2D,UniCanvasElement等相关问题,编译不过去?

  • 解释 :我的插件和库是跟着官方更新,只按官方的兼容来
  • 解决 :并且hbx sdk4.26+,更新自己的hbx sdk版本到我日志中指定的版本,并且按照网盘中的教程处理.你们只要理解form,按钮的的类型丢失问题就知道,一定要理解官方的摇树.不引用去打包必定有问题.

在UNIAPPX或者uniapp中一些属性的简写我可以用吗?

  • 解释 :尽量不要用,因为页面是要经过uniapp sdk去解析编译的,如果sdk的问题就惨
  • 解决 :我们应该用标准的写法,比如插槽我们用v-slot:xxx而不是用#xxx,标签不要写成等等,就是标准写法,不要用语法糖。

在UNIAPPX中,我怎么请求方法uni.request中使用不了泛型,会报错误?

  • 解释 :uniappx中,安卓原生泛型 T 会丢失,而且无法传递,每传递一层方法就会有问题,因为要带关键字
  • 解决 :官方的解决方案链接查看

uniappx 状态管理用的是什么解决方案?有vuex,pinia类似的替代方案吗?

  • 解释 :用不了vuex,pinia库,因为x不支持。
  • 解决 :官方自带状态管理解决方案查看官方链接

一些依赖dom canvas纯绘制的界面放到弹层中功能异常,比如日历,签名等组件

  • 解释 :因为隐藏中时,组件已经渲染了,但其实内部得不到dom canvas导致重绘不了。
  • 解决 :这类组件需要承弹层vif下就可以正常。

radio,checkbox或者其它id,字符比较时,经常用===时比较下来是false?

  • 解释 :安卓不支持===,比较可能是混乱的,因此安卓比较的是内存地址不是引用值
  • 解决 :另外js中""==0=="0"==false,因此你们的字符id不要以0开始,因为安卓不支持===,所以比较时不要用===

使用setup写页面或者组件时,时常遇到 not been initialized?

  • 解释 :这是uts目前在setup中一定要先定义再调用
  • 解决 :把方法或者要用到的变量先定义在顶部,再在后续中调用,不能把顺序反了。

错误示例

ts
let a = ref(getNumber())
const getNumber = ():number=>{
	return 5
}
let b = ref(getNumber())
function getNumber():number{
	return 5
}
// 错误闭包递归示例
function abc(){
	abc()
}

正确示例

ts
const getNumber = ():number=>{
	return 5
}
let a = ref(getNumber())

插件任意插件报错无法解析,比如showModal,showToast等任意插件

  • 解释 :插件需要重新打基座,因为插件中的资源也没打包进基座可能会丢失各种资源,比如字体,图片等
  • 解决 :请在页面上引用,调用后,在hbx菜单上选择发行->自定义基座,打基座成功后,再重新运行基座,选择自定义基座运行即可解决.

使用本demo时,弹层动画,下拉动画等一切该有的动画都没有或者卡?

  • 解释 :可能遇到了x的机型兼容问题
  • 解决 :请打开 我 的 demo 尝试测试下drawer,键盘这些组件有没动画或者动画是否流畅,再进入demo运行xAnimation页面点播放是不是非常流畅, 而不是缓慢。如果有这些特征请在微信vip群中,截机型,hbx版本号发我。并@我。联系官方解决。这是这部分机型无法执行style css动画。

如何使用组件上的ref函数

  • 解释 :根据uniappx需要 组件名驼峰+ComponentPublicInstance
  • 解决 :以签名组件为例:
ts
<x-sign-board ref="board" ></x-sign-board>
let el = this.$refs["board"] as XSignBoardComponentPublicInstance

组件上的插槽变量如何使用?

  • 解释 :正确的vue写法即可
  • 解决 :v-slot:插槽名="{变量1,变量2}",默认插槽是:default; 以x-navbar示例:
vue
<x-navbar>
	<template v-slot:right="{isFiexd}">
		{{isFiexd}}
	</template>
</x-navbar>

如何自定义tabbar,自己写的页面切换闪?

  • 解释 :如果使用我的taabar跳转,其实是navigatorTo跳转页面,闪是正常的。
  • 解决 :如果不想闪如何实现?有几种方案。 把需要用到的页面做成组件,引入到一个页面中,再切换用change切换。可以用vif,也可以用动态组件。当然也可以默认的页面跳转。

使用vshow导致组件异常?

  • 解释 :不止我的组件,你自己的一样会异常。原因是ios目前是移植的nvue的引擎。nvue之前本身就不支持vshow。
  • 解决 :你应该把vshow这个指令忘记不要用。如果想减少重复渲染,切换等保持状态,你应该用动态插槽。这个x 目前安卓,ios,web都支持。

uni.request返回 的res.data是any如何转换为已知的type或者如何向它传递T泛型?

  • 解释 :在安卓上无法直接转换,原因原生需要标记。
  • 解决 :我写了个替代方案,请进入vip代码仓库中,找到左侧菜单,文件,网盘中的教程,里面有关于类型参数设置的示例。

大数据vif等切换卡

  • 解释 :安卓原生开发中节点多易卡,我已经向官方反馈
  • 解决 :自己优化布局节点数量,长列表尽量用list-view,复杂节点数据不适合list-view时,应该分段渲染,优化节点数量

复杂布局vif卡,如页面等

  • 解释 :由于vue组件或者节点多等原因在安卓切换时会触发重新渲染加上本身组件的性能损耗(10-20%,比如渲染一个view是1ms那做成组件可能需要1.1-1.2ms)
  • 解决 :减少布局节点,再切换后,隐藏的布局页面我可以用visibile属性来达到隐藏不渲染,但不让页面塌陷的方案。尽量减少嵌套,嵌套多自然就卡原生java或者kotlin开发的安卓也是如此。

使用我的form表单页面首次渲染慢

  • 解释 :检查布局的复杂性,检查picker类的组件,首次有没有填写modell-str回显,如果不填写,会进入是递归你的list数据来获取回显文本造成消耗大量计算资源,此类组件越多越卡。
  • 解决 :建议后台返回picker中的model-str回显文本,默认返选赋值时。把表单布局优化,减少嵌套的层级。

写了input给了禁用或者只读,它的click,或者其它事件或者事件,触发不了,或者不灵敏

解释:各平台webivew或者sdk不一致。 解决:在input上写 style="pointer-events:none" 然后把触发事件写在input的父组件上就正常了。


某些组件,动画,渲染在开发版本(基座)调试运行,非常 慢,卡,显示要等几秒,比如弹层类,vif切换类

解释:原因,不明,我问过官方,没有给出理由。出现的原因不是所有人,是部分机型。 解决:打个正式包测试,正式包基本是正常的。


运行编译时报:java.lang.0utOfMemoryError:Java heap space等类似错误

解释:可能你的电脑编译内存设置的小了。 解决:打开hbx设置那,插件设置,uts运行内存/编译设置那,至少写1024,如果还不行就继续提高。


使用radio,checkbox等报parent等种问题等?

  • 解释 :由于uni sdk摇树优化问题,未明确引用的组件类型会被sdk删除,radio,checkbox可能引用了父radio-group,checkbox-group类型。
  • 解决 :在文档(下拉到底部代码)/demo中复制相应完整的组件使用示例到你的新增一个页面中参与编译引导sdk编译类型,和下面是同个问题,可以不使用,只需要引引导sdk编译进类型即可。

组件按钮报parent?.submit问题

  • 解释 :由于uni sdk摇树优化问题,未明确引用的组件类型会被sdk删除,由于button组件引用了form,formitem组件类型。
  • 解决 :复制我demo中的一个form页面到你的项目中参与编译,诱导sdk把类型编译进去就行。

win电脑安装安卓开发环境

  • 可以见coding.net项目中的文档,网盘文档中我已上传教程视频
  1. 进入hbx菜单-工具-设置,左侧找到插件配置按照上面的提示
  2. 先安装gradle 7.6.3版本 :https://gradle.org/releases/
  3. 后安装andriod stdio开发软件:https://developer.android.google.cn/studio

中间的Gradle JDK不需要配置


win电脑开发IOS

只要有插件的地方需要打包ios自定基座,需要自备签名文件,然后运行到ios设备


IOS电脑开发ios软件

如果有原生插件,不需要打包,但要配置ios环境

  1. 先安装xCode,进入appStore找到开发类别,找到xCode开发工具下载安装即可
  2. 安装插件依赖:https://doc.dcloud.net.cn/uni-app-x/plugin/uts-ios-cocoapods.html
  3. 自己配置的config.json 里面不要用注释(官方文档有),否则打包会失败。

使用图表组件及x-qrcode组件时页面出现webivew空白报错

  • 解释 :这两个组件用到了hybrid技术,即webview,而你没有复制源文件到你的目录中。
  • 解决 :从我demo中复制hybrid整个目录复制到你项目根目录中即可,如果你本身也有,就覆盖同名的即可

组件样式丢失错乱

  • 解释 :按照我的安装教程你是引用了uvuePx.min.css或者uvue.min.css,可能与你的原子化css类型冲突了
  • 解决 :你可以删除我的辅助css库,本css库是辅助布局用方便大家提升布局效率,它并不影响组件,因此如果你觉得用不上,可以删除不引用。

安卓运行demo报各种原生插件无法解析比如扫码组件等

  • 解释 :原生组件在安卓端需要你打包自定义基座才可运行,并且还要要求你配置原生开发环境。如果你用不到,可以注释原生插件的引用即可不报错。
  • 解决 :按照官方文档配置原生开发环境,并打包自定义基座再次运行。

IOS端运行demo报插件无法使用或者没反应或者闪退

  • 解释 :IOS端目前是js引擎并非swifit代码
  • 解决 :如果你在win电脑开发和使用我的demo开发ios应用,需要打包基座然后运行到你的iphone中查看效果。 代码中不能像安卓那样引用swifit代码和原生代码,且不要修改我的ios原生插件。 如果你是在mac 电脑中开发应用你需要按照官方文档安装ios开发环境,此时你可以更改或者修改原生插件,并可以在 插件中引用swifit代码及原生开发
最近更新