微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法


Posted in Javascript onMay 19, 2020

前言:

微信小程序的循环实现,通过wx:for 与 wx:for-items 与 wx:key,那么他的主要使用特点是什么呢?

1 wx:for

从目前的例子看,wx:for 的使用确实是对数组来做的,参考微信icon示例程序。

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

示例里面都是对数组进行条件判断,比如iconsizejius就是一个典型的数组。

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

2 wx:for-items 与wx:for-item

2.1 wx:for-items

现在看wx:for-items, 和wx:for比,wx:for-items有什么不同呢?

【案】笔者认为wx:for-items应该可以包容wx:for,而不是像有些朋友说,wx:for用于数组的单循环,而wx:for-items用于可嵌套的多级循环。

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

 很显然,wx:for-items,在上面的例子里面用于数组,也同时用于外层的单循环。

【案】

<view wx:for-items="{{array}}" wx:for-item="item">

分析一下,

wx:for-items首先指向了数组array,

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

之后,wx:for-items 选取了item,做进一步的循环STEPS,

我们看到array的一个item包含两个属性,

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

2.2 wx:for-item

wx:for-item注意wx:for-items比少了S,wx:for-item主要只是对循环项目数组的元素(item in array)重新命名,这里

这里array的元素被item取代来表示。

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

 还是刚才的例子,现在看右边,item被用于对循环内体的设置,

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

然后实现对数组内多个元素的渲染

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

3  wx:key

 wx:key是对微信循环功能的一次提升,在软件编译的时候,微信会提示你是用 wx:key来稳定视图层的项目显示。

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

摘取 一段定义的描述,

wx:key 的值以3种形式提供

  • 字符串

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

  • 保留关键字 *this

代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如: 
当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

一般是指定一个唯一的字段(类似于id的定义);

  • 通配符+名字 

例如 *item

 4 嵌套的应用

上面的例子都比较简单,只有一层或者一个属性的嵌套,现在看一个复杂一点的,例子,来源于官方的组件展示程序。

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

这是一个多级菜单的展示,用户点击后,会展开三个选项,而每一个选项对应一个页面,

微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法

<view class="index-bd">
 <view class="kind-list">
  <block wx:for-items="{{list}}" wx:key="{{item.id}}">
  <view class="kind-list-item">
   <view id="{{item.id}}" class="kind-list-item-hd {{item.open ? 'kind-list-item-hd-show' : ''}}" bindtap="kindToggle">
   <view class="kind-list-text">{{item.name}}</view>
   <image class="kind-list-img" src="resources/kind/{{item.id}}.png"></image>
   </view>
   <view class="kind-list-item-bd {{item.open ? 'kind-list-item-bd-show' : ''}}">
   <view class="navigator-box {{item.open ? 'navigator-box-show' : ''}}">
    <block wx:for-items="{{item.pages}}" wx:for-item="page" wx:key="*item">
    <navigator url="pages/{{page}}/{{page}}" class="navigator">
     <view class="navigator-text">{{page}}</view>
     <view class="navigator-arrow"></view>
    </navigator>
    </block>
   </view>
   </view>
  </view>
  </block>
 </view>
 </view>

从这段代码里面,我们看到, 针对上面这个比较复杂的数据结构,在block tag里面(有两层block)

先对list,用wx:for-items,

<block wx:for-items="{{list}}" wx:key="{{item.id}}">

做最外层循环,这里list里面的数组元素,就变为item了,item有4个属性,其中一个是pages,

【注意】这里wx:for-items和wx:for的不同就是,wx:for-items默认的循环项为item,不需要指定了。所以,第二层循环的item,解释器已经理解了,现在item下面的pages,依旧是一个数组,我们可以在嵌套来遍历他。

<block wx:for-items="{{item.pages}}" wx:for-item="page" wx:key="*item">

然后,用wx:for-items,对list里面的pages属性内嵌数组做了遍历循环,注意,后面又立即跟了wx:for-item="page",注意,这里没有s,就是对item的元素pages数组的元素重新命名为page了,后面的page操作,就是对这个内嵌数组操作。这里wx:for-item的命名其实是一个可选项,如果不命名,默认就是item,也就是嵌套的循环下标也是item,大概是为了避免误解,导致,微信团队,又加了这一个功能,个人觉得有点多余。

参考:

1小程序wx:for、wx:for-items和wx:for-item的正确用法

https://developers.weixin.qq.com/miniprogram/dev/component/image.html?search-key=wx%3Afor

2 微信小程序的wx:for,wx:for-items,wx:for-item,wx:key等的关系及正确使用

https://blog.csdn.net/u013338742/article/details/78785918

到此这篇关于微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法的文章就介绍到这了,更多相关小程序 wx:for wx:for-items wx:key内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js写一个字符串转成驼峰的实例
Jun 21 Javascript
Jquery中Event对象属性小结
Feb 27 Javascript
关于function类中定义变量this的简单说明
May 28 Javascript
jquery获取复选框checkbox的值实现方法
May 30 Javascript
第一次接触神奇的Bootstrap导航条
Aug 09 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
Node.JS文件系统解析实例详解
May 15 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
js合并两个数组生成合并后的key:value数组
May 09 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
Nov 05 Javascript
微信小程序使用GoEasy实现websocket实时通讯
May 19 #Javascript
jQuery 动画与停止动画效果实例详解
May 19 #jQuery
jQuery 选择方法及$(this)用法实例分析
May 19 #jQuery
通过js随机函数Math.random实现乱序
May 19 #Javascript
javascript实现获取中文汉字拼音首字母
May 19 #Javascript
微信小程序实现菜单左右联动
May 19 #Javascript
JS array数组检测方式解析
May 19 #Javascript
You might like
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
初品cakephp 入门基础
2012/02/16 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
php获取apk包信息的方法
2014/08/15 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
js实现蒙版效果
2020/01/11 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
详解Python with/as使用说明
2018/12/13 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
初三化学教学反思
2014/01/23 职场文书
网络营销计划
2015/01/17 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python