微信小程序-列表渲染

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

当使用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 });
}
目录
相关文章
|
JSON 小程序 数据格式
微信小程序默认的文字内容在左上角怎么办?带你0基础快速了解skyline渲染模式。
本文主要介绍微信小程序开发中遇到的问题及其解决方法。问题通常由微信小程序自带的Skyline渲染模式引起,而非代码编写错误。解决步骤包括:1. 找到全局配置文件app.json;2. 去掉相关配置项;3. 修改后的配置示例。通过这些步骤可以有效解决文字内容顶格或覆盖的问题。文中还提供了进一步了解Skyline渲染模式的链接,帮助开发者深入理解其原理和应用。
1580 59
|
JSON 小程序 前端开发
towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本
本文介绍了在微信小程序中使用`towxml`库将Markdown格式文本渲染为WXML的方法。文章提供了`towxml`的概述、安装步骤、以及如何在小程序中配置和使用`towxml`进行Markdown解析的详细说明和代码示例。
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,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属性的说明
|
小程序 开发者
【微信小程序】 微信小程序报错不在以下request合法域名列表中
【微信小程序】 微信小程序报错不在以下request合法域名列表中
3517 0
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
462 0
在线课堂+工具组件小程序uniapp移动端源码
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
513 1
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
889 0
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
5153 3
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
923 0
微信小程序更新提醒uniapp
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
630 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

热门文章

最新文章