页面加载完成后,控制台出现报错“渲染层错误”,截图如下:
控制台报错日志:
Error: Expect END descriptor with depth 0 but get another
at i.value (:39360/__pageframe__/__dev__/WAWebview.js:1)
at Function.G [as _startCb] (:39360/__pageframe__/__dev__/WAWebview.js:1)
at n (:39360/__pageframe__/__dev__/WAWebview.js:1)
at h (:39360/__pageframe__/__dev__/WAWebview.js:1)
at :39360/__pageframe__/__dev__/WAWebview.js:1
at t.(:39360/appservice/anonymous function) (http://127.0.0.1:39360/__pageframe__/__dev__/WAWebview.js:1:94975)
at :39360/__pageframe__/pageframe.html:1
at :39360/__pageframe__/pageframe.html:1
at :39360/__pageframe__/pageframe.html:1
at Array.forEach (<anonymous>)
今天抽时间查了下原因,主要发现了2个原因造成了这个错误:
1、.js中有个变量赋值没有做处理,把undefined赋值给了一个数组变量,假如这个数组变量名为arr,
然后又在.wxml页面中用了这个数组arr。
然后页面加载完成后控制台出现了这个“渲染层错误”。
处理变量赋值后,就 不报这个错了。
2、子组件中的一个if使用造成了,这个渲染层错误,
后面把这个if改成了通过style样式来控制。就不报这个错了。
截图对比一下:
控制台报“渲染层错误”代码:
改后不报错代码:
提出疑惑:为什么大部分地方使用if并没有报错,只是偶尔有个地方使用了if才在控制台报这个错?
这是什么原理呢?不清楚,求高手解答!
你好,麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
不好提取代码啊,单独提取页面和造了一些数据,又没有那个现象了。
我现在也出现这个问题。经测试已经复原问题:应该是由于组件嵌套导致的bug。
详情请看片段代码:https://developers.weixin.qq.com/s/deICEQm37D8P
进一步测试发现原因是由于wx:if导致的。
这个地方比较的值不能等于该data的初始值。
wx:
if
=
"{{flag == 1}}"
准确的说是data里面字段有了一个初始值,然后在load或者show中有使用setData改变了该值(不等于初始值),这时候用字段去跟字段的初始值去比较就会触发这个Error。
而且,目前测试只在组件上进行判断时发现。
// 正常
<view>{{flag == 1 ?
'1111'
:
'2222'
}}</view>
// 报错
<one wx:
if
=
"{{flag == 1}}"
></one>
// 报错
<view wx:
if
=
"{{flag == 1}}"
>
<one></one>
</view>
// 报错
<block wx:
if
=
"{{flag == 1}}"
>
<one></one>
</block>