uni-app $nextTick无效
uni-app $nextTick无效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10.0.18363 | HBuilderX |
| Android | Android 10 | - |
| 手机厂商 | 手机机型 | - |
| 华为 | 荣耀8x | - |
操作步骤:
# 预期结果:
实际结果:
## bug描述:
请求到后台数据后,渲染视图(vm),需要获取渲染完成后元素的高度并滚动
封装的方法:
```javascript
toTopHeight() {
const query = uni.createSelectorQuery()
query.select('#id-top-box').boundingClientRect((data => {
console.log(data, "#id-top-box data")
uni.pageScrollTo({
scrollTop: data.height,
duration: 0
});
})).exec()
},
以上封装的方法,核心是调用的时候是需要在再次更新完视图后调用,也就是需要这样调用:
this.$nextTick(() => {
this.toTopHeight()
})
有时无效…


更多关于uni-app $nextTick无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
我也发现this.$nextTick在页面渲染元素后,想获取元素高度获取不到,后来也是用setTimout才可以,我的部分代码是这样的
setTimeout(()=>{
if(item.remark){
let query = uni.createSelectorQuery();
let textHeight,wrapperHeight;
query.select(`.text-wrapper-${item.id}`).boundingClientRect(data=>{
wrapperHeight = data.height;
})
query.select(`.text-${item.id}`).boundingClientRect(data=>{
textHeight = data.height;
})
query.exec(res=>{
// 当文本内容高度大于父容器高度时,为溢出状态
if(textHeight > wrapperHeight){
item.isOverflowed = true;
}else{
item.isOverflowd = false;
}
})
}else {
item.isOverflowed = false;
}
})
在uni-app中,$nextTick有时无效可能与页面渲染时机或异步操作有关。根据你的代码,问题可能出现在以下方面:
- 数据更新与DOM渲染的时序问题:
$nextTick确保在下次DOM更新后执行,但如果数据更新后涉及复杂计算或嵌套组件,可能仍需额外延迟。尝试结合setTimeout作为备选方案:this.$nextTick(() => { setTimeout(() => { this.toTopHeight(); }, 100); });

