【快应用】快应用赋值时出现堆栈溢出
应用 出现 赋值 溢出 堆栈
2023-09-11 14:20:22 时间
现象描述
将通过 $element('id') 获取到内容,赋值给成员变量,引发堆栈溢出(RangeError: Maximum call stack size exceeded),从而导致程序的崩溃。页面成员变量stateText发生变化时,也引发堆栈溢出的报错。
错误示例代码如下:
<template>
<div id="content">
<input type="button" class="button" @click="onTestClick" value="会引发堆栈溢出"/>
<text>{{ stateText }}</text>
</div>
</template>
<script>
export default {
private: {
mContentNode: null,
stateText: 'init state'
},
onReady() {
/* 将 $element('id')获取的内容,赋值给成员变量,则可能引发堆栈溢出 */
this.mContentNode = this.$element('content')
},
onTestClick() {
/* 页面 DOM 存在成员变量的引用,当成员变量发生变化时,则必然引发堆栈溢出问题 */
this.stateText = 'new state'
}
}
</script>
问题分析
由于赋值属于VM属性,会触发大规模的数据驱动变化,导致内部出现异常循环,从而引发堆栈溢出的错误。
解决方法
请勿对成员变量进行赋值,如果需要赋值,可以赋值给局部变量或者页面的全局变量。
正确的示例代码如下:
<script>
let $gContentNode = null
export default {
private: {
stateText: 'init state'
},
onReady() {
/* 如将 $element('id')获取到内容,赋值给局部变量,或页面全局变量,则可规避堆栈溢出问题 */
const cContentNode = this.$element('content')
$gContentNode = this.$element('content')
},
onTestClick() {
this.stateText = 'new state'
}
}
</script>
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
相关文章
- 您当前的位置: 安全博客 > 安全资讯 > Android恶意软件野火般传播:每小时出现350个新的恶意应用 Android恶意软件野火般传播:每小时出现350个新的恶意应用
- 线程高级应用-心得4-java5线程并发库介绍,及新技术案例分析
- 【快应用】H5快应用Web组件打开的网页出现跨域问题如何解决?
- 【快应用】如何处理服务端推送push消息,出现illegal tokens错误提示
- 《HTML5和JavaScript Web应用开发》——1.4 结语
- python正则表达式应用 定义一个函数,求字符串中出现的所有整数之和
- Qt编写地图综合应用15-添加删除清空重置点
- 使用Linux桌面壁纸应用variety发现的一些问题
- Xshell出现要继续使用此程序必须应用到最新的更新或使用新版本
- Redis高级应用(二)--哨兵模式
- deeplink跳转快应用返回出现两次系统添加桌面的弹框
- 【快应用】任意拖动图标实现案例
- 【快应用】H5快应用Web组件打开的网页出现跨域问题如何解决?
- 华为快应用-在其他平台审核出现的白屏问题
- SQL Server 中master..spt_values的应用
- CAD中怎么放大图形?CAD缩放快捷键应用技巧
- 中国工程院院士邬贺铨:5G更大的发展在于产业应用