收藏
回答

小程序如何动态删除指定的cover-view?

聊天系统发送的内容需要逐条显示,但是一直显示不删除的话小程序就会很卡,所以想着只显示20条记录,够20条记录以后,发送一条,就是删除第一条的记录,内容是用cover-view标签写的,现在不知道cover-view标签如何动态删除,请问大佬们有办法么

最后一次编辑于  11-11
回答关注问题邀请回答
收藏

5 个回答

  • 天道惑颜
    天道惑颜
    11-27

    cover-view本身的渲染性能就不高,导致setdata整个list,如果频率过快,性能一下子就炸了,抽成自定义组件也炸。楼上提到的只删除前几条,再push数据,只做到了数据量的维护,并没有根本上解决渲染卡顿白屏问题。我们目前优化的方向是维护两个消息队列,跑定时器渲染数据,不过好像不是很理想,尝试用canvas解决,又有点不好处理滚动问题。楼主有解决办法了记得分享一下

    11-27
    赞同
    回复
  • 风舞红枫、づ
    风舞红枫、づ
    11-11

    用个二十条的数组,每次push一个,shift一个,,然后重新遍历渲染一遍就好了

    11-11
    赞同
    回复 2
    • 小诚
      小诚
      11-11
      试过这个方法了,因为一个用户发送信息就会广播所有用户,在大量用户发言的情况下,加载过快会聊天会完全不显示了
      11-11
      回复
    • 风舞红枫、づ
      风舞红枫、づ
      11-11回复小诚
      那你还是内切h5试试吧,不然setData多了我感觉会卡
      11-11
      回复
  • 袁述(小程序全栈开发工程师)
    袁述(小程序全栈开发工程师)
    11-11

    示例代码:小于20条时,往里面加。大于或者等于20条时。先删除第一条,再添加进去。这样就能保持不多于20条。好用记得点赞喔!


    11-11
    赞同
    回复 6
    • 小诚
      小诚
      11-11
      那我要怎么在界面显示呢,如果要是每次都这样重新遍历一遍的话,用户一多聊天就直接炸了,这个1秒钟可能要有几十次遍历
      11-11
      回复
    • 袁述(小程序全栈开发工程师)
      袁述(小程序全栈开发工程师)
      11-11回复小诚
      这个没有遍历喔,是判断是否大于20条。然后删除再复制。完全没问题的。
      11-11
      回复
    • 小诚
      小诚
      11-11
      那我要怎么在界面显示呢
      11-11
      回复
    • 袁述(小程序全栈开发工程师)
      袁述(小程序全栈开发工程师)
      11-11回复小诚
      wx:for呀,页面遍历这个数组。
      11-11
      回复
    • 小诚
      小诚
      11-11
      那要是有新的人发言,然后我又要重新wx:for?
      11-11
      回复
    查看更多(1)
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    11-11

    就设置一个20条数据的对象啊

    data:{

        list:[]

    }

    =============

    var list = this.data.list

    list = list.length >= 20 ? list.slice(1, 20) : list

    list.push({...新的一条...})

    this.setData({

        list: list

    })

    页面list循环输出cover-view就行

    11-11
    赞同
    回复 5
    • 小诚
      小诚
      11-11
      如果要是每次都这样重新遍历一遍的话,用户一多聊天就直接炸了,这个1秒钟可能要有几十次遍历
      11-11
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      11-11回复小诚
      肯定要这样啊,不然你怎么隐藏不想显示的cover-view?
      就算你wx:if或者hidden也要this.setData设置,再说了页面有很多不显示的cover-view,不耗内存不卡吗
      11-11
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      11-11回复小诚
      setData频率高的话,弄成自定义组件好一点
      11-11
      回复
    • 小诚
      小诚
      11-11
      有删除cover-view的办法么
      11-11
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      11-11回复小诚
      没有,只能通过setData控制显示与否或者循环出来
      11-11
      回复
  • 🇨🇳紫升
    🇨🇳紫升
    11-11

    只能什么wx-if了

    但是如果你是做聊天系统,每提交一次后,可以查询最后20条记录返回,更新数据就可以了。

    如果有定时查询,也一样返回20条记录,更新数据

    或是查询当前聊天时间以后记录,返回记录   返回几条,就删除前几条。再把返回来记录添加到原来的数据后面就可以了

    11-11
    赞同
    回复 3
    • 小诚
      小诚
      11-11
      试过这个方法了,因为一个用户发送信息就会广播所有用户,在大量用户发言的情况下,加载过快会聊天会完全不显示了
      11-11
      回复
    • 🇨🇳紫升
      🇨🇳紫升
      11-11回复小诚
      广播所有用户。。。只显示20条会不会有点少。大量发言的情况下,用户可能看不到回复他的内容
      11-11
      回复
    • 小诚
      小诚
      11-11
      这个没事,产品就是这样设计的
      11-11
      回复
问题标签