uni-app 模板函数重复执行无数次
uni-app 模板函数重复执行无数次
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:2.8.11
手机系统:iOS
手机系统版本号:iOS 13.4
手机厂商:苹果
手机机型:iphone 8plus
页面类型:nvue
打包方式:云端
示例代码:
<template>
<view class="content">
<text>{{test()}}</text>
</view>
</template>
<script>
export default {
data() {
return {
b:0
}
},
methods: {
test(){
this.b++;
return this.b;
},
}
}
</script>
<style>
</style>
操作步骤: 启动app就能出现 b值 无限制+1
预期结果: 显示1
实际结果: 无限制+1
bug描述: 按道理说test 只应该执行一次,实际上执行了无数次
更多关于uni-app 模板函数重复执行无数次的实战教程也可以访问 https://www.itying.com/category-93-b0.html
视频虽然是模拟器的,但是ios也是一样。
示例代码是模拟这个问题的,实际功能比这些复杂。
更多关于uni-app 模板函数重复执行无数次的实战教程也可以访问 https://www.itying.com/category-93-b0.html
请勿这样使用,因为
模板渲染时会执行此方法,执行此方法导致数据变更,数据变更导致模板重新渲染,模板渲染时会执行此方法,执行此方法导致数据变更,数据变更导致模板重新渲染,模板渲染时会执行此方法,执行此方法导致数据变更,数据变更导致模板重新渲染,模板渲染时会执行此方法,执行此方法导致数据变更,数据变更导致模板重新渲染,模板渲染时会执行此方法,执行此方法导致数据变更,数据变更导致模板重新渲染。。。
对,是我代码语法写错了,不是bug
这个问题的原因是你在模板中直接调用了方法(test()),这会导致每次数据变化时都会重新执行该方法。
在uni-app/Vue中,模板中的函数调用会在每次渲染时重新执行。由于你的test()方法会修改data中的b值,这又会触发重新渲染,从而形成无限循环。
解决方案:
- 不要在模板中直接调用会修改数据的方法
- 将计算结果存储在data中,在created/mounted生命周期中初始化
修改后的代码:
<template>
<view class="content">
<text>{{b}}</text>
</view>
</template>
<script>
export default {
data() {
return {
b: 0
}
},
mounted() {
this.b = 1; // 初始化值
}
}
</script>