收藏
回答

scrollview重新加载元素bug

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug scroll-view 工具 7.0.0 2.4.3

- 当前 Bug 的表现(可附上截图)

    scroll-view列表里的组件删除,再加载新组件,新组建疑似使用了旧组件的尸体,并且旧组件的状态被保留到了新组件,无法触发reday函数


- 预期表现


- 复现路径


- 提供一个最简复现 Demo


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

3 个回答

  • 一风清扬
    一风清扬
    01-25

    其实这个不是bug,ready函数只会执行一次在页面布局完成的时候,你定时器执行的时候,都3秒后意思过了ready执行期才执行的定时器,那个时候不会运行ready函数了。


    01-25
    赞同
    回复
  • 乌龙茶
    乌龙茶
    01-25

    希望官方尽快搞定这个问题,我的项目里有很多列表是用类似模式的代码控制的,公司业务决定这样写代码会比较好,如果这个问题不能解决,那真的会非常头疼

    代码片段,请注意颜色的顺序

    https://developers.weixin.qq.com/s/ocAbTGmc7e5N

    01-25
    赞同
    回复 2
    • 一风清扬
      一风清扬
      01-25

      兄弟,理解错ready函数和组件的意思了。给你改了改代码,看看效果修改你传的代码片段,效果可以了


      01-25
      回复
    • 乌龙茶
      乌龙茶
      01-26回复一风清扬

      按照一般的想法,我有一个wx-for方式渲染的列表,对array1做的渲染,然后我用setData把array1变成另一个数组array2(),那么框架应该先把原有组件删除,再重新渲染新组件。但是小程序框架为了性能,把array2中的新元素和array1中的老元素绑定到页面上的属性做了对比,如果新元素和老元素绑定到页面上的属性的值全都没有差异,那么就不删除本应该删除的旧组件,但也不再次调用它的生命周期方法,而是直接放入新列表里显示出来,这就导致了我提交的代码片段的bug,因为我的组件的样式是由ready方法决定的。很直观的现象,不难做出这样的推理。只能说官方在优化这块真的偷懒了,没有在编译的时候多下功夫,直接无脑优化了。这么一优化我的页面是不闪烁了,可我的客户如果看到的数据是错的,这锅还是得我背。

      01-26
      回复
  • 卢霄霄
    卢霄霄
    01-25

    能来个片段吗?

    01-25
    赞同
    回复 12
    查看更多(7)