微信小程序-列表渲染

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

当使用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月前
|
小程序 容器
【微信小程序】-- WXML 模板语法 - 条件渲染 -- wx:if & hidden (十一)
【微信小程序】-- WXML 模板语法 - 条件渲染 -- wx:if & hidden (十一)
|
3天前
|
小程序 算法 UED
【专栏】小程序图片合成:异步并发渲染→同步阻塞渲染
【4月更文挑战第29天】本文探讨了小程序图片合成就绪渲染的转变,从异步并发渲染(提高效率,并发处理但可能导致资源竞争和顺序难控)到同步阻塞渲染(顺序可控,资源管理更精细,可能引起界面卡顿)。同步阻塞通过任务队列和阻塞机制确保顺序,解决并发问题。注意避免长时间阻塞,及时释放资源,优化任务效率,并结合异步处理。选择合适方案取决于实际需求,以平衡效率与一致性。
|
2月前
|
JSON 小程序 API
【微信小程序】-- 案例 - 本地生活(列表页面)(三十)
【微信小程序】-- 案例 - 本地生活(列表页面)(三十)
|
2月前
|
小程序 JavaScript 索引
【微信小程序】-- WXML 模板语法 - 列表渲染 -- wx:for & wx:key(十二)
【微信小程序】-- WXML 模板语法 - 列表渲染 -- wx:for & wx:key(十二)
|
10天前
|
存储 编解码 小程序
抖音小程序开发中遇见的坑点
在抖音小程序开发中,需注意10大坑点:遵守小程序限制与规范;解决兼容性问题;优化数据加载速度;适应分享功能限制;处理视频播放挑战;优化图片加载显示;管理资源文件;提升用户体验;考虑安全性;及时更新维护。通过测试、优化和遵循官方文档,可克服这些问题,打造优质小程序。
|
20天前
|
小程序 前端开发 API
小程序全栈开发中的多端适配与响应式布局
【4月更文挑战第12天】本文探讨了小程序全栈开发中的多端适配与响应式布局。多端适配涉及平台和设备适应,确保统一用户体验;响应式布局利用媒体查询和弹性布局维持不同设备的布局一致性。实践中,开发者可借助跨平台框架实现多平台开发,运用响应式布局技术适应不同设备。同时,注意兼容性、性能优化和用户体验,以提升小程序质量和用户体验。通过这些方法,开发者能更好地掌握小程序全栈开发。
|
20天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
20天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
20天前
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
|
20天前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中PWA技术的应用,PWA结合Web的开放性和原生应用的性能,提供离线访问、后台运行、桌面图标和原生体验。开发者可利用Service Worker实现离线访问,Worker处理后台运行,Web App Manifest添加桌面图标,CSS和JavaScript提升原生体验。实践中需注意兼容性、性能优化和用户体验。PWA技术能提升小程序的性能和用户体验,助力开发者打造优质小程序。

热门文章

最新文章