uni-app 安卓app环境下this.$nextTick回调不执行
uni-app 安卓app环境下this.$nextTick回调不执行
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10企业版1903(18362.30) | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.45
手机系统:Android
手机系统版本号:Android 12
手机厂商:华为
手机机型:联想拯救者y70(Lenovo L71091)
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
### 示例代码:
```vue
<template>
<view>
<button size="mini" @click="fn1">按钮1</button>
<button size="mini" @click="fn2">按钮2</button>
<view v-for="(item, index) in list" :key="index">{{ item }}</view>
{{ num }}
</view>
</template>
<script>
export default {
data() {
return {
list: ['aaa'],
num: 111
};
},
methods: {
fn1() {
console.log('fn1_start');
this.list = ['aaa'];
this.$nextTick(() => {
console.log('fn1_end');
});
},
fn2() {
console.log('fn2_start');
this.num = 111;
this.$nextTick(() => {
console.log('fn2_end');
});
}
}
};
</script>
<style scoped lang="scss"></style>
操作步骤:
点击按钮1后fn1函数执行, 控制台只打印 fn1_start $nextTick里回调没有执行 fn1_end 未打印 在修改data里的数组类型数据时,当新数据与老数据一致时$nextTick回调不执行,原始类型数据是正常的
预期结果:
点击按钮1后fn1函数执行, 控制台打印 fn1_start 再执行 $nextTick 回调函数 fn1_end 打印出来
实际结果:
$nextTick里回调没有执行 fn1_end 未打印
bug描述:
安卓app环境下this.$nextTick回调不执行
更多关于uni-app 安卓app环境下this.$nextTick回调不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
HBuilderX 4.61.2025040322-alpha 已修复。
更多关于uni-app 安卓app环境下this.$nextTick回调不执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
感谢反馈,复现了此问题。
vue2+app 会出现此问题,遗漏了数据无变化时候执行回调的逻辑。下个 alpha 会修复此问题。
这是一个已知的uni-app在Android平台下的性能优化问题。当数据未实际变化时,$nextTick回调可能不会触发。
原因分析:
- uni-app在Android环境下对数组数据的变更检测有特殊处理
- 当新设置的数组值与旧值完全相同时,框架会跳过更新流程
- 由于更新流程被跳过,$nextTick回调也就不会执行
解决方案:
- 确保每次数组更新都返回新对象:
fn1() {
console.log('fn1_start');
this.list = [...this.list]; // 创建新数组
this.$nextTick(() => {
console.log('fn1_end');
});
}
- 或者使用强制更新方法:
fn1() {
console.log('fn1_start');
this.$forceUpdate();
this.$nextTick(() => {
console.log('fn1_end');
});
}