最近在做uniapp打包小程序的时候,发现uniapp打包抖音小程序后,组件使用的ref定义后,在this.$refs中都获取不到组件的实例(这里用开发者工具是没问题的,需要在真机调试),于是乎就开始了各种搜索,找解决方案。
1、首先是查的抖音小程序的官网生命周期顺序
上图是抖音官网的组件加载顺序生命周期图。
按照上图,我把所有卸载onLoad方法中的相应数据都放到了onReady中,然后真机测试依然是无法拿到组件的实例获取的依然是undefined。
于是乎想到是不是可以加上了this.$nextTick在这个方法里边获取,经过一番测试还是不行。
然后就去uniapp官网查找,最后查到了这个解决方案:
https://github.com/dcloudio/uni-app/pull/4555
问题描述
抖音 App 版本为 27.2.0 的抖音小程序,v-if 判断的 ref 组件,无法通过 this.$refs 拿到组件实例,如果是抖音App 27.1.0 版本的话,是正常的。
补充信息
经过排查,发现因为抖音App 27.2.0 版本的 SDKVersion 为 3.0.0,在 initRefs 方法中,对 selectAllComponents API 做了一个兼容处理:
1、如果使用的是HBuilder工具开发直接升级工具为最新版就可以。
2、如果使用的是命令行cli进行开发的话,需要更改一下uniapp打包抖音的插件
我们需要找到如下目录
node_modules\@dcloudio\uni-mp-toutiao\dist\index.js
找到上边的位置把它替换成下边的样子
const [majorVersion , minorVersion] = tt.getSystemInfoSync().SDKVersion.split('.');
if (majorVersion > 1 || minorVersion > 16) {
这样在进行打包就可以正常使用了。