微信小程序-列表渲染

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

当使用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 });
}
目录
相关文章
|
3月前
|
JSON 小程序 数据格式
微信小程序默认的文字内容在左上角怎么办?带你0基础快速了解skyline渲染模式。
本文主要介绍微信小程序开发中遇到的问题及其解决方法。问题通常由微信小程序自带的Skyline渲染模式引起,而非代码编写错误。解决步骤包括:1. 找到全局配置文件app.json;2. 去掉相关配置项;3. 修改后的配置示例。通过这些步骤可以有效解决文字内容顶格或覆盖的问题。文中还提供了进一步了解Skyline渲染模式的链接,帮助开发者深入理解其原理和应用。
348 1
|
7月前
|
JSON 小程序 前端开发
towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本
本文介绍了在微信小程序中使用`towxml`库将Markdown格式文本渲染为WXML的方法。文章提供了`towxml`的概述、安装步骤、以及如何在小程序中配置和使用`towxml`进行Markdown解析的详细说明和代码示例。
|
7月前
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,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属性的说明
|
9月前
|
小程序 开发者
【微信小程序】 微信小程序报错不在以下request合法域名列表中
【微信小程序】 微信小程序报错不在以下request合法域名列表中
1320 0
|
2月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
14天前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
14天前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
1月前
|
人工智能 自然语言处理 小程序
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
851 11
技术小白如何利用DeepSeek半小时开发微信小程序?
|
1月前
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
213 11
|
2月前
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
3154 15
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程

热门文章

最新文章