收藏
回答

渲染层错误 Expect END descriptor with depth

页面加载完成后,控制台出现报错“渲染层错误”,截图如下:


控制台报错日志:

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才在控制台报这个错?

这是什么原理呢?不清楚,求高手解答!

最后一次编辑于  05-09  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

2 个回答

  • 娇华
    娇华
    05-09

    你好,麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    05-09
    赞同
    回复 5
    • P_峡
      P_峡
      05-14

      不好提取代码啊,单独提取页面和造了一些数据,又没有那个现象了。

      05-14
      回复
    • chao
      chao
      06-03

      我现在也出现这个问题。经测试已经复原问题:应该是由于组件嵌套导致的bug。

      详情请看片段代码:https://developers.weixin.qq.com/s/deICEQm37D8P

      06-03
      回复
    • chao
      chao
      06-03

      进一步测试发现原因是由于wx:if导致的。

      这个地方比较的值不能等于该data的初始值

      wx:if="{{flag == 1}}"


      06-03
      回复
    • chao
      chao
      06-03

      准确的说是data里面字段有了一个初始值,然后在load或者show中有使用setData改变了该值(不等于初始值),这时候用字段去跟字段的初始值去比较就会触发这个Error。

      06-03
      回复
    • chao
      chao
      06-03

      而且,目前测试只在组件上进行判断时发现。

      // 正常
      <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>


      06-03
      回复
  • 爱生活的疯子
    爱生活的疯子
    05-13



    我这边也是这种问题 报错的是一个列表页面 本地跟手机上很难复现 大部分的报错是在Android上 试了之前查的好多种方法 但都不行 在这里请教下这种问题会在什么情况下报错 感谢

    05-13
    赞同
    回复 3
    • P_峡
      P_峡
      05-14

      我这边排查原因出现这个渲染错误的现象,一个是由于js更新数据造成的;一个就是wxml页面操作时造成的。其实js更新也相当于是操作了wxml页面重新渲染。只能一步步删代码,找出看是那段代码造成了这个现象出现。 原理我也没搞清楚,只能排查出问题。

      05-14
      回复
    • 爱生活的疯子
      爱生活的疯子
      05-14回复P_峡

      你上述的解决方案 都可以在本地复现的么 还是本地OK 客户端是报错的?

      一步步删代码有点不太现实 代码量很大;但是呢 我这边本地开发工具是没有任何报错的的,后台监控客户端上报错量巨多 一天好几W的报错量

      还有只知道是渲染层错误 但是具体是什么原因,也没有排查出来,报错的信息量太少了。 本地也没有复现出来。。


      05-14
      回复
    • P_峡
      P_峡
      05-14回复爱生活的疯子

      我这边在本地小程序开发工具上就出现 了

      05-14
      回复