【微信小程序】基础篇 -- WXML 模板语法 - 列表渲染 -- wx:for & wx:key(十二)

本文是【微信小程序开发教程】专栏的第12篇文章,介绍了微信小程序中的列表渲染,包括wx:for的基本用法、指定索引和当前项变量名、<block>标签的使用以及wx:key的重要性和使用场景。作者强调了在使用wx:for时添加wx:key以优化渲染效率。
摘要由CSDN通过智能技术生成

请添加图片描述

  • 💌 所属专栏:【微信小程序开发教程】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

在这里插入图片描述


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【微信小程序开发教程】专栏的第12篇文章;
  今天开始学习微信小程序的第八天💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。不知不觉已经学习微信小程序八天了,估计大佬们一天就学完这些内容了吧,我还在慢吞吞的学完,然后在看官方文档总结写写文章
  专栏地址:【微信小程序开发教程】, 此专栏是我是夜阑的狗微信小程序开发过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏,【源代码下载地址】


一、列表渲染

  前面已经介绍完了WXML模板语法–条件渲染,通过栗子学习到了如何在WXML页面上进行条件渲染,也了解到两中渲染方式。接下来就来讲解一下另外一个模板语法–列表渲染。话不多说,让我们原文再续,书接上回吧。

请添加图片描述

1、wx:for

   在实际开发过程中,会需要显示多个相同的组件,此时只要在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。这里对数组的引用都是用 Mustache 语法(双花括号)来表示, 具体代码如下所示:

cshPageTab.wxml:

<view wx:for="{{array}}">
  当前篇数:{{index}} 当前学习天数:{{item}} 
</view> 

   默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

cshPageTab.js:

Page({
  data: {
	array:["1","2","3","4","5","6","7","8"],
  },
})

  此时就完成将数组每项数据都渲染到组件上,实际效果如下所示:

在这里插入图片描述

2、指定索引和当前项的变量名

  在列表渲染的过程中,可以通过使用 wx:for-index 可以指定当前循环项的索引的变量名 ,使用 wx:for-item 可以指定当前项的变量名,不过在开发过程这种用法比较少用到,具体代码如下:

cshPageTab.wxml:
  可以在上面栗子的基础进行改动,看是否能改动成功。

<view wx:for="{{array}}">
  当前篇数:{{index}} 当前学习天数:{{item}} 
</view>
<view>----------------</view>
<view wx:for="{{array}}" wx:for-index="ids" wx:for-item="ids">
  当前篇数:{{ids}} 当前学习天数:{{ids}} 
</view>

  可以看出这两者的渲染效果是一样的,来看下实际运行效果:

在这里插入图片描述

3、<block> 使用 wx:for

  前面再讲 wx:if 条件渲染的时候就用到了 <block> 标签,同样该标签也适用于 wx:for ,以渲染一个包含多节点的结构块。具体代码如下:

cshPageTab.wxml:

<block wx:for="{{['好好学习','天天向上','各位大佬好']}}">
  <view>{{index}}</view>
  <view>{{item}}</view>
</block>

   可以来看一下运行效果:

在这里插入图片描述

4、wx:key 的使用

  当数据改变触发渲染层重新渲染的时候,不带有 key 的组件会被重新创建,而不会重新排序,所以需要使用 wx:key 来指定列表中项目的唯一的标识符。wx:key 的值以两种形式提供:

  • 在 for 循环的 arrayitem 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。

  • 可以当前数组的索引 index 来当其 key

  在实际开发过程中,建议只要使用到 wx:for 都要加 key,具体代码如下:

cshPageTab.wxml:

  wx:key 外面是可以不用 Mustache 语法来表示的

<view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>

  类似于 Vue 列表渲染中的 :key,小程序在实现列表渲染时,也建议为渲染出来的列表项指定唯一的 key 值,从而提高渲染的效率。如果没有 id ,也可以使用索引来当 key 值。

cshPageTab.js:

Page({
  data: {
	userList:[
      {id: 1, name: '狂飙'},
      {id: 2, name: '安欣'},
      {id: 3, name: '高启强'},
      {id: 4, name: '孙子兵法'}
    ],
  },
})

  此时就可以成功的把数组里的数据渲染出来,可以来看下实际运行效果:

在这里插入图片描述

  接下来可以切换到 Console 面板,如果我们在循环时候不适用 key 会显示出警告,提示可以给循环提供 key,前面的循环都没有使用 key 。

在这里插入图片描述


总结

  感谢观看,这里就是WXML 模板语法 - 列表渲染 – wx:for & wx:key的介绍使用,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:



订阅更多,你们将会看到更多的优质内容!!

  • 12
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,让我们开始微信小程序实战-个人中心、订单制作的教程。 ## 1. 创建个人中心页面 首先,我们需要在小程序中创建一个个人中心页面。可以在 app.json 中添加一个 tab 标签,在 pages 数组中添加个人中心页面的路径: ```json { "tabBar": { "list": [ { "pagePath": "pages/index/index", "text": "首页" }, { "pagePath": "pages/personal/personal", "text": "个人中心" } ] }, "pages": [ "pages/index/index", "pages/personal/personal" ] } ``` 接下来,在 pages 文件夹中创建 personal 文件夹,并创建 personal.wxml、personal.wxss、personal.js、personal.json 四个文件。在 personal.wxml 文件中添加以下代码: ```html <view class="personal"> <view class="avatar"> <image class="avatar-img" src="{{avatarUrl}}"></image> <text class="nickname">{{nickname}}</text> </view> <view class="order"> <view class="order-item" bindtap="goToOrder"> <image class="order-icon" src="/images/personal/order.png"></image> <text class="order-text">我的订单</text> <image class="order-arrow" src="/images/personal/arrow.png"></image> </view> </view> </view> ``` 这里我们创建了一个包含头像、昵称、我的订单等模块的页面。其中,头像和昵称是从后端接口获取的数据。 ```javascript // personal.js Page({ data: { avatarUrl: '', nickname: '' }, onLoad: function () { // 从后端接口获取用户信息 wx.request({ url: 'https://example.com/userinfo', success: (res) => { this.setData({ avatarUrl: res.data.avatarUrl, nickname: res.data.nickname }) } }) }, goToOrder: function () { // 跳转到订单页面 wx.navigateTo({ url: '/pages/order/order' }) } }) ``` 在 personal.js 文件中,我们编写了 onLoad 和 goToOrder 两个函数。onLoad 函数用于从后端接口获取用户信息并在页面上显示,goToOrder 函数用于跳转到订单页面。 ## 2. 创建订单页面 接下来,我们需要创建一个订单页面。在 pages 文件夹中创建 order 文件夹,并创建 order.wxml、order.wxss、order.js、order.json 四个文件。在 order.wxml 文件中添加以下代码: ```html <view class="order"> <view class="order-header"> <text class="order-title">我的订单</text> <text class="order-more">查看更多</text> </view> <view class="order-list"> <view class="order-item" wx:for="{{orders}}" wx:key="index"> <image class="order-img" src="{{item.imgUrl}}"></image> <view class="order-info"> <text class="order-name">{{item.name}}</text> <text class="order-price">¥{{item.price}}</text> </view> </view> </view> </view> ``` 这里我们创建了一个包含订单标题、订单列表等模块的页面。其中,订单列表是从后端接口获取的数据。 ```javascript // order.js Page({ data: { orders: [] }, onLoad: function () { // 从后端接口获取订单列表 wx.request({ url: 'https://example.com/orders', success: (res) => { this.setData({ orders: res.data }) } }) } }) ``` 在 order.js 文件中,我们编写了 onLoad 函数用于从后端接口获取订单列表并在页面上显示。 ## 3. 页面样式 最后,我们需要编写页面的样式。在 app.wxss 中添加以下代码: ```css .tab-bar { position: fixed; bottom: 0; left: 0; width: 100%; height: 50rpx; background-color: #fff; border-top: 1rpx solid #e5e5e5; box-shadow: 0 -2rpx 6rpx rgba(0, 0, 0, 0.05); } .tab-bar-item { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; font-size: 20rpx; color: #8a8a8a; } .tab-bar-item.active { color: #007aff; } .personal { display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 20rpx; } .avatar { display: flex; flex-direction: column; align-items: center; justify-content: center; } .avatar-img { width: 80rpx; height: 80rpx; border-radius: 50%; } .nickname { margin-top: 10rpx; font-size: 24rpx; font-weight: bold; } .order { margin-top: 20rpx; } .order-item { display: flex; flex-direction: row; align-items: center; justify-content: space-between; width: 90%; height: 80rpx; background-color: #fff; border-radius: 10rpx; box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.05); padding: 20rpx; margin-bottom: 20rpx; } .order-icon { width: 40rpx; height: 40rpx; } .order-text { font-size: 28rpx; font-weight: bold; } .order-arrow { width: 20rpx; height: 20rpx; } ``` 在 order.wxss 中添加以下代码: ```css .order { margin-top: 20rpx; } .order-header { display: flex; flex-direction: row; align-items: center; justify-content: space-between; padding: 20rpx; background-color: #fff; border-radius: 10rpx; box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.05); margin-bottom: 20rpx; } .order-title { font-size: 32rpx; font-weight: bold; } .order-more { font-size: 24rpx; color: #007aff; } .order-list { display: flex; flex-direction: column; align-items: center; justify-content: center; } .order-item { display: flex; flex-direction: row; align-items: center; justify-content: space-between; width: 90%; height: 120rpx; background-color: #fff; border-radius: 10rpx; box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.05); padding: 20rpx; margin-bottom: 20rpx; } .order-img { width: 80rpx; height: 80rpx; border-radius: 10rpx; } .order-info { display: flex; flex-direction: column; align-items: flex-start; justify-content: center; margin-left: 20rpx; } .order-name { font-size: 28rpx; font-weight: bold; } .order-price { margin-top: 10rpx; font-size: 24rpx; color: #007aff; } ``` 至此,我们完成了微信小程序实战-个人中心、订单制作的教程。希望对你有所帮助!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是夜阑的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值