DevsDawn
DevsDawn

给小程序list列表加个搜索功能

本文介绍方法搜索效率太低,之前没有想到有更好的方法。现在我用的是直接搜索,然后把匹配结果放进新数组

今天给小程序添加个搜索功能,需要实现前端一个list列表的搜索。

搜索有search()和indexOf()两个方法,搜了一下两者的区别,发现indexOf在搜索字符串的情况下效率更高,于是选择了indexOf

另外存储变量也有两种方案:

  1. 直接给details[id]加多一个HIDDEN变量,details[ID].HIDDEN
  2. 新增一个hidden变量,hidden[id]

试了一下,直接在wx:if中使用item.HIDDEN比hidden[index]速度更加快。


刚开始打算使用Change函数,直接input输入实时进行搜索。

handleZanFieldChange(e) {
    for(var i = 0; i < this.data.details.length; i++)
    {
      var data = this.data.details[i];
      if (data.NAME.indexOf(e.detail.value) == -1)
      {
        var str = "details[" + i + "].HIDDEN"
        this.setData({
          [str]: true
        })
      }
      else
      {
        var str = "details[" + i + "].HIDDEN"
        this.setData({
          [str]: false
        })       
      }
    }
}

后来发现每输入一个字符就会被触发一次,变成回调重复执行。后来改成了handleZanFieldBlur

也在xml中纠结了一下要用wx:if还是hidden,官方文档这样写:

wx:if vs hidden
因为 wx:if 之中的模板也可能包含数据绑定,所有当 wx:if 的条件值切换时,框架有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染。

同时 wx:if 也是惰性的,如果在初始渲染条件为 false,框架什么也不做,在条件第一次变成真的时候才开始局部渲染。

相比之下,hidden 就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。

一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。

最后选择了wx:if。

  <view class="zan-panel">
    <navigator class="zan-cell zan-cell--access" wx:for="{{details}}" wx:key="{{item.SID}}" bindtap="changeSchool" data-sid="{{item.SID}}" data-name="{{item.NAME}}" wx:if="{{item.HIDDEN != true}}">
      <view class="zan-cell__bd">{{item.NAME}}</view>
      <view class="zan-cell__ft"></view>
    </navigator>
  </view>

最后在整个测试流程中,无论是用indexOf还是search,wx:if还是hidden,搜索时list都会有一个比较明显的刷新过程,将近200条的list,搜索用了大概10秒。另外做一个浮层来直接显示搜索出的结果感觉会更加好。

若无特别说明,本文采用 CC BY-SA 4.0 协议进行许可。如需转载,请附上本文链接和本声明。
本文链接:https://devsdawn.com/2018/06/%e7%bb%99%e5%b0%8f%e7%a8%8b%e5%ba%8flist%e5%88%97%e8%a1%a8%e5%8a%a0%e4%b8%aa%e6%90%9c%e7%b4%a2%e5%8a%9f%e8%83%bd/
DigitalOcean云服务,美国上市公司,注册即送200USD体验金
Vultr云服务,全球25+地域,注册即送100USD体验金

发表回复

textsms
account_circle
email

DevsDawn

给小程序list列表加个搜索功能
本文介绍方法搜索效率太低,之前没有想到有更好的方法。现在我用的是直接搜索,然后把匹配结果放进新数组 今天给小程序添加个搜索功能,需要实现前端一个list列表的搜索。 搜索有search…
扫描二维码继续阅读
2018-06-03