详细问题描述
[内容]
我们项目使用uni-app开发的进度已经做到了80%,但是出现了一个致命的问题,使得我们无法使用uni-app。
问题是:uni-app 在程序中出现了对undefined变量调用,整个app程序会进入瘫痪
我们对此问题进行了验证,验证步骤如下:
[步骤]
- 在hello-uniapp 示例项目中修改number-box.vue文件(或其他任何vue文件),添加一个watch方法监听数值numberValue的变化,并且故意在watch方法中让其出错
watch: { numberValue(newValue, oldValue) { console.log(newValue); var param = undefined; param.forEach(()=>{}); } },```
- 点击界面上加号按钮值变化后,报错
TypeError: Cannot read property 'forEach' of undefined at Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/mpvue/index.js:638
- 恶魔开始出现了,整个程序会瘫痪,比如 组件的选项卡点击不会跳转,网络请求数据回来后不会刷新界面(v-model失效),这个问题特别严重,使得uni-app的开发完全无法使用。
-
我们也尝试在compute,mounted, onload 函数中进行同样的测试,会复现。。
<template> <view class="page"> <page-head :title="title"></page-head> <view class="uni-input-group uni-common-mt"> <view class="uni-input-row"> <label>默认</label> <uni-number-box></uni-number-box> </view> <view class="uni-input-row"> <label>限定最小值和最大值</label> <uni-number-box :min="0" :max="9"></uni-number-box> </view> <view class="uni-input-row"> <label>设定步长值(步长10)</label> <uni-number-box :step="10"></uni-number-box> </view> <view class="uni-input-row"> <label>输入框只读</label> <uni-number-box :disabled="true"></uni-number-box> </view> <view class="uni-input-row"> <label>获取输入的值 : {{numberValue}}</label> <uni-number-box v-on:change="onNumberChange"></uni-number-box> </view> <view class="uni-input-row"> <label>设置默认值</label> <uni-number-box :value="numberValue2"></uni-number-box> </view> </view> <view class="uni-padding-wrap uni-common-mt"> <view class="uni-title">行内应用</view> <view class="uni-inline-item"> <text>购买数量 : </text> <uni-number-box v-on:change="onNumberChange3"></uni-number-box> <text>{{numberValue3}}</text> </view> </view> <view style="height:80upx;"></view> </view> </template> <script> import uniNumberBox from '../../../components/uni-number-box.vue' export default { data() { return { title: 'uni-number-box', numberValue: 0, numberValue2 : 5, numberValue3 : 0 } }, components: { uniNumberBox }, **watch: { numberValue(newValue, oldValue) { console.log(newValue); undefined.forEach(()=>{}); } },** methods: { onNumberChange(value) { this.numberValue = value; }, onNumberChange3(value) { this.numberValue3 = value; console.log('购买数量 : ' + value); } } } </script> <style> </style>
IDE运行环境说明
[mac版本号]
Mac HBuilder X 1.9.4.20190426
uni-app运行环境说明
小米pad
3 个回复
迪丽热bug
我也遇到这个问题~我是当某个值返回null时 整个程序瘫痪 然后当值存在时才赋值就解决了问题
k***@qq.com - 90IT男
我是上啦加载,一此,两次,三次,ok..第四次就,五次就越来越卡,渲染数据会越来越慢,也不知道什么问题,大家有遇到过吗
DCloud_heavensoft
使用自定义组件模式
2019-07-11 22:31
k***@qq.com
回复 DCloud_heavensoft: 真坑了。。真是这个原因
2019-07-12 10:12
DCloud_heavensoft
回复 k***@qq.com: 注意用新版、看更新日志和公告
2019-07-12 18:17
banro
这属于js错误啊,不应算是bug,即使不使用uniapp,而是html5+js开发网页,遇到这类问题,一样会出现你目前遇到的情况,undefined 自然不可 foreach ,遇到js错误,后续js当然无法执行了
建议在使用 这类有可能出现 null undefined 等非预期类型的变量前,加个判断, if isArray 然后再foreach