
💎【行业认证·权威头衔】
✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家
✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主
✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域的技术布道者
🏆【荣誉殿堂】
🎖 连续三年蝉联"华为云十佳博主"(2022-2024)
🎖 双冠加冕CSDN"年度博客之星TOP2"(2022&2023)
🎖 十余个技术社区年度杰出贡献奖得主
📚【知识宝库】
覆盖全栈技术矩阵:
◾ 编程语言:.NET/Java/Python/Go/Node…
◾ 移动生态:HarmonyOS/iOS/Android/小程序
◾ 前沿领域:物联网/网络安全/大数据/AI/元宇宙
◾ 游戏开发:Unity3D引擎深度解析
🚀微信小程序条件渲染
在编写微信小程序时,经常需要进行条件判断,以确定是否需要渲染某代码块。
🔎1 使用 wx:if 判断单个组件
在微信小程序框架里,使用 wx:if="{{condition}}" 来进行条件判断,确定是否需要渲染该代码块。示例代码如下:
<view wx:if="{{condition}}">你好,欢迎学习微信小程序</view>
使用 wx:elif 和 wx:else 来添加一个 else 代码块。示例代码如下:
<view wx:if="{{length > 5}}">长度大于5</view>
<view wx:elif="{{length > 2}}">长度大于2</view>
<view wx:else>长度为3</view>
index.js
Page({
data: {
length: 8
}
});
当 length = 8 时,输出结果为“长度大于5”,执行第一个判断条件。
补充说明:
wx:if是控制属性,值为真时渲染该节点,为假时不渲染。wx:elif和wx:else必须紧跟在wx:if或wx:elif后面。wx:if是惰性的:如果初始条件为假,框架不会渲染该节点,也不会执行内部逻辑。- 与
hidden的区别:hidden只是控制显示与隐藏,节点始终存在;wx:if为假时节点不存在。
🔎2 使用 wx:if 一次性判断多个组件
因为 wx:if 是一个控制属性,所以需要将它添加到组件上。如果想一次性判断多个组件,可以使用 <block/> 标签将多个组件包装起来,并使用 wx:if 控制属性。示例代码如下:
<block wx:if="{{true}}">
<view>内容1</view>
<view>内容2</view>
</block>
<block> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接收控制属性。
补充说明:
<block>常用于wx:if、wx:for等控制属性,不会产生额外的 DOM 节点。- 如果多个组件需要同时显示或隐藏,使用
<block>比逐个添加wx:if更简洁。 <block>也可以配合wx:for使用。
🚀微信小程序列表渲染
在小程序中,经常需要将一些内容以列表的形式显示出来,这就要用到微信小程序的列表渲染。如果只是将数据以列表的形式显示出来,那么直接一行行显示就行。但如果数据的显示是动态的,用这种方式就不能解决问题了,可以用 wx:for 来解决这个问题。
🔎1 使用 wx:for 列表渲染单个组件
在组件上使用 wx:for 控制属性绑定一个数组,即可使用该数组中的各项数据重复渲染该组件。默认数组当前项的下标变量名为 index、数组当前项的变量名为 item。示例代码如下:
<view wx:for="{{array}}">
{{index}}: {{item.name}}
</view>
index.js
Page({
data: {
array: [
{ name: 'tom' },
{ name: 'kevin' }
]
}
});
使用 wx:for-item 可以指定数组当前项的变量名,使用 wx:for-index 可以指定数组当前项的下标变量名。示例代码如下:
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
{{idx}}: {{itemName.name}}
</view>
补充说明:
wx:for可以遍历数组,也可以遍历对象。- 默认
item是当前项,index是当前下标。 - 使用
wx:for-item和wx:for-index可以自定义变量名,避免嵌套循环时命名冲突。 - 在嵌套
wx:for中,建议使用不同的变量名,例如wx:for-item="item"和wx:for-item="subItem"。
🔎2 使用 wx:for 一次性列表渲染多个组件
当想渲染一个包含多节点的结构块时,就需要将 wx:for 应用在 <block/> 标签中。示例代码如下:
<block wx:for="{{[1, 2, 3]}}">
<view>{{index}}:</view>
<view>{{item}}</view>
</block>
补充说明:
<block>不会渲染成实际节点,只是包装元素。- 使用
<block>可以同时渲染多个组件,避免在外层额外添加view。 - 如果列表项结构复杂,建议使用
<block>包裹多个节点。
🔎3 使用 wx:key 指定唯一标识符
如果列表中项目的位置会动态改变,或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 input 组件中的输入内容,switch 组件的选中状态),就需要使用 wx:key 来指定列表中项目的唯一标识符。
wx:key 的值以下列两种形式提供:
- 字符串:代表在
for循环的集合中值的某个属性,该属性的值需要是列表中唯一的字符串或数字,且不能动态改变。 - 保留关键字
*this:代表在for循环中的item本身,这种表示方法需要item本身是一个唯一的字符串或数字。
当数据改变触发渲染层重新渲染时,会校正带有 key 的组件,框架会确保它们被重新排序,而不是被重新创建,以确保组件保持自身的状态,并且提高列表渲染时的效率。
示例代码如下:
<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;">
{{item.id}}
</switch>
index.js
Page({
data: {
objectArray: [
{ id: 5, unique: 'unique_5' },
{ id: 4, unique: 'unique_4' },
{ id: 3, unique: 'unique_3' },
{ id: 2, unique: 'unique_2' },
{ id: 1, unique: 'unique_1' },
{ id: 0, unique: 'unique_0' }
]
}
});
注意:
如不提供 wx:key,会出现一个 warning。如果明确知道该列表是静态的,或者不必关注其顺序,可以选择忽略该 warning。
补充说明:
wx:key的值不要加{{}},直接写属性名即可,例如wx:key="unique"。- 如果数组项是唯一的字符串或数字,可以使用
wx:key="*this"。 - 使用
wx:key可以提升列表渲染性能,避免组件状态丢失。 - 在动态列表中,强烈建议始终提供
wx:key。
🚀补充:条件渲染与列表渲染的常见组合
🔎1. 列表渲染中嵌套条件渲染
<view wx:for="{{list}}" wx:key="id">
<view wx:if="{{item.status === 1}}">已上架</view>
<view wx:elif="{{item.status === 0}}">已下架</view>
<view wx:else>未知状态</view>
</view>
🔎2. 条件渲染中嵌套列表渲染
<block wx:if="{{list.length > 0}}">
<view wx:for="{{list}}" wx:key="id">
{{item.name}}
</view>
</block>
<view wx:else>暂无数据</view>
🔎3. 使用 block 同时控制多个节点
<block wx:if="{{isLogin}}">
<view>欢迎回来</view>
<view>{{userInfo.nickName}}</view>
</block>
<block wx:else>
<view>请先登录</view>
</block>
🚀注意事项
wx:if、wx:elif、wx:else必须连续使用,中间不能插入其他节点。<block>不会渲染成真实节点,只作为包装元素。wx:for默认变量名为item和index。- 嵌套循环时,建议使用
wx:for-item和wx:for-index自定义变量名。 wx:key的值不要加{{}},直接写属性名或*this。- 动态列表必须提供
wx:key,避免状态丢失和性能问题。 wx:if为假时节点不存在,hidden为真时节点存在但隐藏。- 使用 AI 生成代码后,需要人工检查条件判断和列表渲染逻辑是否正确。
🚀附:AI 提示词模板与完整回答示例
原文未包含 AI 提示词模板和回答。以下为便于学习和开发补充的完整模板与完整回答,可直接复制使用。
🔎模板 1:让 AI 解释微信小程序条件渲染
提示词模板:
请详细解释微信小程序中的条件渲染。
要求:
1. 说明 wx:if、wx:elif、wx:else 的用法;
2. 说明 block 标签的作用;
3. 说明 wx:if 与 hidden 的区别;
4. 给出完整 WXML 和 JS 示例代码;
5. 说明注意事项。
请用分级标题和代码块输出,内容完整。
完整回答示例:
微信小程序条件渲染详解
🦋一、wx:if、wx:elif、wx:else
wx:if 用于条件判断,值为真时渲染节点,为假时不渲染。
<view wx:if="{{length > 5}}">长度大于5</view>
<view wx:elif="{{length > 2}}">长度大于2</view>
<view wx:else>长度为3</view>
Page({
data: {
length: 8
}
});
当 length = 8 时,显示“长度大于5”。
🦋二、block 标签
<block> 是一个包装元素,不会渲染成真实节点,可以同时控制多个组件。
<block wx:if="{{true}}">
<view>内容1</view>
<view>内容2</view>
</block>
🦋三、wx:if 与 hidden 的区别
| 对比项 | wx:if | hidden |
|---|---|---|
| 渲染方式 | 条件为假时不渲染节点 | 节点始终渲染,仅控制显示隐藏 |
| 初始渲染 | 惰性,条件为假时不渲染 | 始终渲染 |
| 切换开销 | 较高 | 较低 |
| 适用场景 | 条件不常变化 | 频繁切换显示隐藏 |
🦋四、注意事项
wx:elif和wx:else必须紧跟wx:if。<block>不会渲染成真实节点。wx:if为假时节点不存在。- 频繁切换显示隐藏建议使用
hidden。
🔎模板 2:让 AI 生成列表渲染代码
提示词模板:
请使用微信小程序原生框架,生成一个商品列表页面。
要求:
1. 使用 wx:for 渲染商品列表;
2. 使用 wx:key 指定唯一标识;
3. 包含商品图片、名称、价格;
4. 如果列表为空,显示“暂无商品”;
5. 给出完整 WXML、WXSS、JS 代码,并解释关键逻辑。
完整回答示例:
index.wxml
<view class="page">
<block wx:if="{{list.length > 0}}">
<view class="goods-item" wx:for="{{list}}" wx:key="id">
<image class="goods-img" src="{{item.cover}}" mode="aspectFill"></image>
<view class="goods-info">
<text class="goods-name">{{item.name}}</text>
<text class="goods-price">¥{{item.price}}</text>
</view>
</view>
</block>
<view wx:else class="empty">暂无商品</view>
</view>
index.wxss
.page {
padding: 20rpx;
background: #f5f5f5;
min-height: 100vh;
}
.goods-item {
display: flex;
padding: 20rpx;
margin-bottom: 20rpx;
background: #fff;
border-radius: 10rpx;
}
.goods-img {
width: 160rpx;
height: 200rpx;
border-radius: 8rpx;
background: #eee;
}
.goods-info {
flex: 1;
margin-left: 20rpx;
display: flex;
flex-direction: column;
}
.goods-name {
font-size: 30rpx;
font-weight: bold;
color: #333;
}
.goods-price {
margin-top: 20rpx;
font-size: 32rpx;
color: #e54d42;
}
.empty {
text-align: center;
color: #999;
margin-top: 100rpx;
font-size: 30rpx;
}
index.js
Page({
data: {
list: [
{ id: 1, name: '微信小程序开发实战', price: 59.8, cover: '/images/book1.png' },
{ id: 2, name: 'JavaScript高级程序设计', price: 89.0, cover: '/images/book2.png' }
]
}
});
关键逻辑说明:
- 使用
wx:for遍历list。 - 使用
wx:key="id"指定唯一标识。 - 使用
block wx:if判断列表是否为空。 - 列表为空时显示“暂无商品”。
- 图片使用
mode="aspectFill"保持比例。
🔎模板 3:让 AI 修复 wx:key 警告
提示词模板:
我在微信小程序中使用 wx:for 渲染列表时,控制台出现 warning:
“Now you can provide attr `wx:key` for a `wx:for` to improve performance.”
相关代码:
<view wx:for="{{list}}">
{{item.name}}
</view>
请帮我修复,并解释 wx:key 的作用和正确用法。
完整回答示例:
修复后的代码:
<view wx:for="{{list}}" wx:key="id">
{{item.name}}
</view>
wx:key 的作用:
- 指定列表中项目的唯一标识符。
- 当数据变化时,框架会校正带有 key 的组件,确保它们被重新排序而不是重新创建。
- 保持组件状态,例如 input 输入内容、switch 选中状态。
- 提高列表渲染性能。
正确用法:
- 如果数组项是对象,且对象中有唯一属性,使用
wx:key="属性名"。 - 如果数组项是唯一的字符串或数字,使用
wx:key="*this"。 - 不要写成
wx:key="{{item.id}}",直接写wx:key="id"。
示例:
<!-- 对象数组 -->
<view wx:for="{{list}}" wx:key="id">{{item.name}}</view>
<!-- 字符串数组 -->
<view wx:for="{{['a', 'b', 'c']}}" wx:key="*this">{{item}}</view>
注意事项:
- 动态列表必须提供
wx:key。 - 静态列表可以忽略 warning。
wx:key的值不要加{{}}。wx:key的值必须是唯一的,且不能动态改变。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/aa2528877987/article/details/167077194




