微信小程序-列表渲染

简介: 微信小程序可有意思了

当使用wx:for进行列表渲染时,有一些需要注意的易错点

wx:for的使用对象:wx:for只能用于数组类型的数据,不能用于对象。如果要渲染对象中的属性,需要先将对象转换为数组。

使用wx:key属性:在使用wx:for时,需要给每个渲染的子项添加一个唯一的wx:key属性,以便小程序能够正确地跟踪和更新每个子项的状态。

遍历的索引使用index:在使用wx:for时,可以通过index关键字访问当前遍历项的索引值。需要注意的是,索引从0开始计数,可以在模板中使用 { {index}} 获取索引值。

在使用wx:for时避免同时设置wx:if:在某些情况下,可能需要在列表中的每个子项上使用wx:if进行条件判断。然而,应该尽量避免同时在wx:for和wx:if上使用相同的数据,因为这可能导致性能问题。如果需要过滤或动态显示子项,请考虑在数据层面进行处理,而不是在模板中使用wx:if。

在列表中绑定事件:如果在使用wx:for的列表中绑定事件,需要在绑定的事件回调函数中传递当前遍历项的数据。可以通过使用data-*属性在模板中存储当前遍历项的数据,并在事件回调函数中通过event.currentTarget.dataset来获取。

我们知道我们的数据都是来自于后端的,渲染肯定少不了它,肯定会遇见如下情境

  1. 嵌套列表渲染:在一个列表中嵌套另一个列表的情况下,如何正确地使用wx:for进行嵌套列表渲染。你需要确定正确的数据结构和嵌套模板的使用方式。

  2. 条件渲染和动态展示:如何在列表渲染过程中根据某些条件动态地展示或隐藏某些子项。你可以尝试使用wx:if或其他条件判断语句来实现。

  3. 列表项的交互:如何为每个列表项添加交互功能,例如点击、滑动等。你需要考虑如何绑定事件以及如何传递和处理列表项的数据。

  4. 大数据量的列表渲染:当面对大数据量的列表渲染时,如何优化性能以确保流畅的用户体验。你可以尝试使用分页加载、虚拟列表等技术来优化性能。

  5. 动态更新列表数据:如何在列表渲染过程中根据用户交互或其他事件动态地更新列表数据。你需要学习如何在事件回调函数中修改数据,并使用setData方法将数据更新到视图中。

那咱们逐个突破

嵌套列表渲染

// 数据结构示例
data: {
   
  mainList: [
    {
    id: 1, subList: [{
    id: 11 }, {
    id: 12 }] },
    {
    id: 2, subList: [{
    id: 21 }, {
    id: 22 }] },
  ]
}

// 模板示例
<view wx:for="{
   {mainList}}" wx:key="id">
  <view>{
   {
   item.id}}</view>
  <view wx:for="{
   {item.subList}}" wx:key="id">
    <view>{
   {
   item.id}}</view>
  </view>
</view>

条件渲染和动态展示

// 数据结构示例
data: {
   
  itemList: [
    {
    id: 1, show: true },
    {
    id: 2, show: false },
  ]
}

// 模板示例
<view wx:for="{
   {itemList}}" wx:key="id">
  <view wx:if="{
   {item.show}}">{
   {
   item.id}}</view>
</view>

// 动态修改数据示例
toggleItemShow: function(event) {
   
  var itemId = event.currentTarget.dataset.itemId;
  var itemList = this.data.itemList.map(function(item) {
   
    if (item.id === itemId) {
   
      item.show = !item.show;
    }
    return item;
  });
  this.setData({
    itemList: itemList });
}

列表项的交互:

// 模板示例
<view wx:for="{
   {itemList}}" wx:key="id" bindtap="handleItemClick" data-item-id="{
   {item.id}}">
  <view>{
   {
   item.id}}</view>
</view>

// 事件回调函数示例
handleItemClick: function(event) {
   
  var itemId = event.currentTarget.dataset.itemId;
  // 处理列表项点击事件
}

大数据量的列表渲染:

// 数据分页加载示例
data: {
   
  itemList: [],  // 初始为空
  currentPage: 1,
  pageSize: 10
}

// 加载下一页数据示例
loadNextPageData: function() {
   
  var nextPage = this.data.currentPage + 1;
  // 调用接口或处理逻辑获取下一页数据,假设返回一个包含新数据的数组 newList
  var newList = getNewData(nextPage, this.data.pageSize);
  var itemList = this.data.itemList.concat(newList);
  this.setData({
   
    itemList: itemList,
    currentPage: nextPage
  });
}

// 虚拟列表优化示例
// 当列表数量很大时,可以只渲染可见区域附近的子项,其他子项滚动时再动态加载
<scroll-view scroll-y="true" bindscrolltolower="loadNextPageData" style="height: 500rpx;">
  <view style="height: {
   {itemHeight * itemList.length}}rpx;">
    <view wx:for="{
   {visibleItemList}}" wx:key="id">
      <!-- 渲染可见区域的子项 -->
    </view>
  </view>
</scroll-view>

动态更新列表数据:

// 修改列表数据示例
updateListData: function() {
   
  // 假设根据某些条件修改 id 为 1 的子项数据
  var updatedItemList = this.data.itemList.map(function(item) {
   
    if (item.id === 1) {
   
      item.name = 'New Name';
    }
    return item;
  });
  this.setData({
    itemList: updatedItemList });
}
目录
相关文章
|
2月前
|
JSON 小程序 前端开发
towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本
本文介绍了在微信小程序中使用`towxml`库将Markdown格式文本渲染为WXML的方法。文章提供了`towxml`的概述、安装步骤、以及如何在小程序中配置和使用`towxml`进行Markdown解析的详细说明和代码示例。
|
2月前
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
这篇文章介绍了微信小程序中条件渲染和列表渲染的使用方法,包括wx:if、wx:elif、wx:else、wx:for、wx:key以及block标记和hidden属性的使用。
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
|
4月前
|
小程序 开发者
【微信小程序】 微信小程序报错不在以下request合法域名列表中
【微信小程序】 微信小程序报错不在以下request合法域名列表中
939 0
|
4月前
|
小程序 前端开发
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
255 0
|
1月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
498 7
|
1月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
582 1
|
1月前
|
小程序 前端开发 测试技术
微信小程序的开发完整流程是什么?
微信小程序的开发完整流程是什么?
114 7
ly~
|
2月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
79 6
|
1月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
196 1
|
1月前
|
小程序 前端开发 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【10月更文挑战第3天】随着移动互联网的发展,微信小程序凭借便捷的用户体验和强大的社交传播能力,成为企业拓展业务的新渠道。本文探讨了小程序全栈开发中的身份认证与授权机制,包括手机号码验证、微信登录、第三方登录及角色权限控制等方法,并强调了安全性、用户体验和合规性的重要性,帮助开发者更好地理解和应用这一关键技术。
66 5

热门文章

最新文章