热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

列表渲染wx:key的作用以及条件渲染wx:if与hidden之间的区别

本篇文章给大家带来的内容是关于列表渲染wx:key的作用以及条件渲染wx:if与hidden之间的区别,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
本篇文章给大家带来的内容是关于微信小程序中使用async/await语法的方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

开发微信小程序离不开“页面渲染”,对于初学者来说很难理解小程序里的“页面渲染”是什么、怎么用?
而学过 vue 的同学来说,这个就比较熟悉了,实际上就是数据绑定页面渲染。
那么关于页面渲染最重要的是列表渲染和条件渲染这两块,先来看看几个简单的例子。

下面是个“列表渲染”的例子:


  {{index}}: {{item.message}}
Page({
  data: {
    array: [{
      message: 'foo',
    }, {
      message: 'bar'
    }]
  }
})

上面的例子可以看出,默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。当然,使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名,如下:


  {{idx}}: {{itemName.message}}

下面是个“条件渲染”的例子:

True
Page({
  data: {
    condition: true
  }
})

上面的例子说明,当 condition 为真时,页面渲染上面的 view 标签。当然也可以用 wx:elif 和 wx:else 来添加一个 else 块,如下:

1
2
3

下面接入正题,探索文章题目的疑问

一、 列表渲染中的 wx:key 有什么作用

其实初次看 官方文档 可能会对 wx:key 有点懵,官方解释是这样的:

根据我多年看文档经验,一般我看不懂的可以忽略不重要的文字,只需关注重点,例如上图的文字加粗部分,因此,一开始我选择不写 wx:key 这个属性。然而在开发过程中写多了列表渲染(而没有加 wx:key)之后,控制台会报很多的 wx:key 的警告,对于有点代码洁癖的我看起来很不爽,但又苦于不清楚 wx:key 的真正作用,于是自创了一个解决办法,那就是在每个列表渲染后面加上 wx:key="{{index}}",类似下面这样:


  {{item}}

于是我惊奇地发现警告统统不见了,也没有其他负面影响,于是我就这样用了大半年。
然而,半年前我做的一个项目里面有个列表渲染需要试试获取用户头像和昵称,于是我之前的做法不管用了,每次获取到的用户信息跟当前内容不对应,并且会发生错乱。于是我重新理解了一遍 wx:key,结合下面的例子,我似乎明白了:


  {{item.id}}
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 是用来绑定当前列表中的项目特征的,也就是说,如果列表是动态更新的,那么 wx:key 的作用是保持原有项目的整个状态不变。
结合上面的例子,我们可以知道,对于列表数组是个对象数组,那么 wx:key 属性直接写对应的唯一的属性名就可以了,比如上面的 wx:key="unique", 或者 wx:key="id" 也是可以的,只要保持属性是唯一值就行了,有点类似页面标签里面的 id 属性在页面是唯一的。
对于列表数组是个基本类型数组,那么直接写 wx:key="*this" 就可以了,如下:


  {{index}}:
  {{item}}

巧用 wx:key 属性

  • 如果很明确自己的列表渲染是个静态列表,那么你可以像我一开始那样做,加个 wx:key="{{index}}" 就可以了

  • 反之,如果是个动态列表,那么就得在数组里找到唯一的键值,放在 wx:key 里面

  • 当然如果你无视警告,也不影响功能,不加也行

二、 wx:if 和 hidden 有什么区别

其实我们用条件渲染更多地在用 wx:if 而不是 hidden,因为前者可以拓展,后者缺乏一定的逻辑。然而他们到底有什么区别呢?
官方文档 是这样描述的:

下面列举几种使用场景给开发者参考:


上面代码是一个上拉加载动画显示与隐藏组件,可以看到用的是 hidden,因为他是一个需要频繁切换的组件。


  
    {{node.children[0].text}}
  


  


  

上面代码展示的是渲染文字还是图片或者是视频,只展示其中的一个那么用 wx:if 最佳。

下面是一个自定义 input 组件:


  
    
    发送
  

其功能是点击评论按钮能实时显示输入框,否则隐藏。这里为什么用 wx:if 呢?因为我希望它显示时是新的 input 组件,不是之前渲染好的,这样如果我刚输入完文字,再次评论不会出现上一次的文字残留。

巧用 wx:if 和 hidden

  • 有时我们需要提前渲染好里面的子组件,那么要用 hidden,否则待显示时需要加上渲染的时间

  • 通常情况下,我在隐藏的时候都不需要该组件的话,那就用 wx:if

  • 如果需要在页面中点击切换的渲染,那么考虑小程序性能问题,还是用 hidden 为好

三、思考(引伸)

1、 这个元素在列表和条件渲染上是很好用的,不过要注意不要在这个标签上绑定其他属性,比如 data- 或者绑定事件 bindtap。下面是一个反例:


  view1
  view2

上面的代码里,在 js 中定义绑定事件后,你会发现不会执行。原因就在 元素在渲染页面后并不会存在,他不是个组件,不会渲染在页面树节点里面,所以在他上面绑定的事件或者属性也不会有效。

2、 当 wx:for 的值为字符串时,会将字符串解析成字符串数组;另外,花括号和引号之间如果有空格,将最终被解析成为字符串,请看下面的例子:


  {{item}}

等同于


  {{item}}

  {{item}}

等同于


  {{item}}

本文参考:微信小程序开发基础教程 https://www.html.cn/study/20.html

以上就是列表渲染wx:key的作用以及条件渲染 wx:if 与 hidden之间的区别的详细内容,更多请关注其它相关文章!


推荐阅读
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Scrum立会报告+燃尽图(十月十七日总第八次):分配Alpha阶段任务
    此作业要求参见:https:edu.cnblogs.comcampusnenu2018fallhomework2246项目地址:https:git.co ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 花生壳内网穿透:实现企业智能网关远程管理和维护
    随着物联网技术的发展,企业对智能网关的需求日益增加。本文介绍如何利用花生壳内网穿透技术,实现企业智能网关的远程管理和维护,提高效率,降低成本。 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 在小程序开发过程中,经常会遇到核心功能缺失的问题。本文将探讨如何有效识别并解决这些问题,确保应用的稳定性和用户体验。通过详细的案例分析和技术手段,我们将提供实用的解决方案,帮助开发者快速定位并修复核心功能缺失的错误,提升小程序的整体性能和可靠性。 ... [详细]
  • 据《经济参考报》报道,微信即将推出新版小程序,预计将在近期正式上线。此次更新将新增支付功能,进一步提升用户体验。此外,新版小程序还将提供“附近门店”接口,用户可通过定位功能轻松查找周边门店,享受更加便捷的服务。这一系列改进旨在为用户提供更加丰富和高效的使用体验。 ... [详细]
  • 经过短暂的休整,我们再次推出新的小程序功能,进一步提升用户体验。现在,小程序页面不仅支持放置转发按钮,还新增了长按快速转发的功能,让用户能够更加便捷地分享页面内容。这一更新将为开发者提供更多创意空间,同时也大幅提升了用户的互动性和使用便利性。 ... [详细]
  • Java 点餐系统源代码附带管理后台(免费提供)
    本项目提供了一套基于 Java 的点餐系统,包括前端小程序和后端管理平台。采用 Spring Boot 和 SSM 框架,结合 MySQL 和 Redis 数据库技术,适用于学习和二次开发。有需要源代码的开发者可以通过私信联系,免费获取下载链接。 ... [详细]
  • 基于Java的微信小程序:Spring Boot驱动的中小学家校互动与电子作业管理平台
    基于Java的微信小程序,采用Spring Boot作为后端框架,构建了一个高效的中小学家校互动与电子作业管理平台。前端使用了uni-app框架,确保跨平台兼容性。该平台集成了家校沟通、作业发布与管理、学生成绩查询等功能,旨在提升教育管理效率和家长参与度。后端开发环境配置完善,采用Spring Boot、MyBatis等技术栈,确保系统的稳定性和扩展性。 ... [详细]
author-avatar
mobiledu2502939937
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有