微信小程序 - 条件渲染(wx:if、hidden)与列表渲染(wx:for)

一、条件渲染概述

  1. 条件渲染用于根据特定条件决定是否渲染某部分内容

  2. 微信小程序提供了两种方式实现条件渲染,分别是 wx:ifhidden


二、条件渲染

1、wx:if
(1)基本介绍
  1. wx:if 根据 condition 的真假决定是否渲染该组件及其子组件

  2. condition 为 true 时渲染,否则不渲染

  3. wx:if 是惰性的,初始条件为 false 时不会渲染,条件变为 true 时才会渲染

html 复制代码
<view wx:if="{{【condition】}}">【content】</view>
(2)演示
html 复制代码
<view wx:if="{{isShow}}">显示内容</view>
2、wx:elifwx:else
(1)基本介绍
  • wx:elifwx:else 用于多条件判断
html 复制代码
<view wx:if="{{【condition1】}}">【content1】</view>
<view wx:elif="{{【condition2】}}">【content2】</view>
<view wx:else>【content3】</view>
(2)演示
html 复制代码
<view wx:if="{{score >= 90}}">优秀</view>
<view wx:elif="{{score >= 60}}">及格</view>
<view wx:else>不及格</view>
3、hidden
(1)基本介绍
  1. hidden 根据 condition 的真假控制组件的显示与隐藏

  2. condition 为 true 时隐藏,false 时显示

  3. hidden 通过 CSS 的 display 属性控制显示状态

html 复制代码
<view hidden="{{【condition】}}">【content】</view>
(2)演示
html 复制代码
<view hidden="{{isHidden}}">隐藏内容</view>
4、wx:if 对比 hidden
(1)渲染机制
  1. wx:if 条件为 true 时渲染,否则不渲染

  2. hidden 始终渲染,仅通过 CSS 控制显示状态

(2)使用场景
  1. wx:if 条件变化较少,或组件渲染开销较大时使用

  2. hidden 需要频繁切换显示状态时使用


三、列表渲染概述

  1. 列表渲染用于根据数组或对象的数据动态生成多个组件

  2. 微信小程序通过 wx:for 实现循环渲染


四、列表渲染

1、基本介绍
  • wx:for 根据数组或对象循环渲染组件
html 复制代码
<view wx:for="{{【array】}}">
  {{index}}: {{item}}
</view>
html 复制代码
<view wx:for="{{【object】}}">
  {{index}}: {{item}}
</view>
参数 说明
array / object 需要循环的数组 / 对象
item 当前循环项(默认名称)
index 当前循环项的索引(默认名称)
2、演示
  1. 数组列表渲染
html 复制代码
<view wx:for="{{fruits}}">
  {{index + 1}}. {{item}}
</view>
javascript 复制代码
Page({
  data: {
    fruits: ['苹果', '香蕉', '橙子']
  }
});
  1. 对象列表渲染
html 复制代码
<view wx:for="{{list}}">
  {{item.id}} - {{item.name}}
</view>
javascript 复制代码
Page({
  data: {
    list: [
      { id: 1, name: '小明' },
      { id: 2, name: '小红' },
      { id: 3, name: '小刚' }
    ]
  }
});
  1. 嵌套列表渲染
html 复制代码
<view wx:for="{{classes}}">
  <text>{{item.name}} 班学生:</text>
  <view wx:for="{{item.students}}">
    {{index + 1}}. {{item}}
  </view>
</view>
javascript 复制代码
Page({
  data: {
    classes: [
      {
        name: '一年级',
        students: ['小明', '小红']
      },
      {
        name: '二年级',
        students: ['小刚', '小丽']
      }
    ]
  }
});
3、自定义变量名
(1)基本介绍
  1. 可以通过 wx:for-item 自定义当前循环项变量名

  2. 可以通过 wx:for-index 自定义当前循环项的索引变量名

html 复制代码
<view wx:for="{{【array / object】}}" wx:for-item="【currentItem】" wx:for-index="【currentIndex】">
  {{【currentIndex】}}: {{【currentItem】}}
</view>
(2)演示
html 复制代码
<view wx:for="{{fruits}}" wx:for-item="fruit" wx:for-index="i">
  {{i + 1}}. {{fruit}}
</view>
javascript 复制代码
Page({
  data: {
    fruits: ['苹果', '香蕉', '橙子']
  }
});

4、wx:key
(1)基本介绍
  • wx:key 用于指定列表中每个项的唯一标识符,以提高渲染性能
html 复制代码
<view wx:for="{{【array】}}" wx:key="【key】">
  {{index}}: {{item}}
</view>
html 复制代码
<view wx:for="{{【object】}}" wx:key="【key】">
  {{index}}: {{item}}
</view>
(2)适用场景
  1. wx:key 的适用于数据可能发生变化的列表,例如,排序、删除、新增

  2. 如果没有 wx:key,当列表数据发生变化时,会重新渲染整个列表,而不是只更新变化的部分

(3)演示
  1. 如果列表项是对象,可以使用对象的某个唯一属性(例如,id)作为 wx:key 的值
html 复制代码
<view wx:for="{{users}}" wx:key="id">
  {{item.name}}
</view>
js 复制代码
Page({
  data: {
    users: [
      { id: 1, name: 'Alice' },
      { id: 2, name: 'Bob' },
      { id: 3, name: 'Charlie' }
    ]
  }
});
  1. 如果列表项是简单数据类型(例如,字符串、数字),可以直接使用 *this(数组项本身)作为 wx:key 的值
html 复制代码
<view wx:for="{{fruits}}" wx:key="*this">
  {{item}}
</view>
js 复制代码
Page({
  data: {
    fruits: ['Apple', 'Banana', 'Orange']
  }
});
  1. 如果列表项没有唯一标识符,可以使用 index 作为 wx:key 的值
html 复制代码
<view wx:for="{{fruits}}" wx:key="index">
  {{index + 1}}. {{item}}
</view>
js 复制代码
Page({
  data: {
    fruits: ['Apple', 'Banana', 'Orange']
  }
});
相关推荐
一颗烂土豆4 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
kyriewen6 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
用户4324281061149 小时前
微信小程序从0到1接入微信支付的完整攻略
微信小程序
米丘9 小时前
微前端之 Web Components 完全指南
微服务·html
weedsfly9 小时前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
假如让我当三天老蒯9 小时前
前端跨域解决方案(学习用)
前端·javascript·面试
铁皮饭盒11 小时前
Bun 哪比 Node.js 快?
javascript·后端
JieE21219 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
candyTong21 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
_柳青杨1 天前
深入理解 JavaScript 事件循环
前端·javascript