微信小程序wxml列表渲染原理解析


Posted in Javascript onNovember 27, 2019

这篇文章主要介绍了微信小程序wxml列表渲染原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

列表渲染存在的意义

以电商为例,我们希望渲染5个商品,而又希望容易改变,我们就要在wxml中动态添加。

<view>
<block wx:for="{{products}}" wx:for-item="item" wx:key="index">


<view>{{index+1}}:{{item.name}}</view>

</block>
</view>
Page({
 data: {
  message: "hello world",
  products: [{
    name: "商品A"
   },
   {
    name: "商品B"
   },
   {
    name: "商品C"
   },
   {
    name: "商品D"
   },
   {
    name: "商品E"
   }
  ]
 }

})

上面在一个非显示组件block中,我们渲染五个有内容的view

wx:for是循环数组,wx:for-item即给列表赋别名

子循环

<view wx:for="{{parentList}}">
 {{item.id}}
 <view wx:for="{{item.childList}}" wx:for-item="items">
 {{items.name}}{{items.account}}
 </view>

wx:key用来稳定渲染,作为渲染想的唯一标识(主要有三种)

1、字符串

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

data: {
input_data: [
{ id: 1, unique: "unique1" },
{ id: 2, unique: "unique2" },
{ id: 3, unique: "unique3" },
{ id: 4, unique: "unique4" },
]
}
//test.wxml
<input value="id:{{item.id}}" wx:for="{{input_data}}" wx:key="unique" />

2、保留关键字 *this

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

data: {
numberArray: [1, 2, 3, 4],
stringArray:['aaa','ccc','fff','good']
}
//test.wxml
<input value="id:{{ item }}" wx:for="{{numberArray}}" wx:key="*this" />
<input value="id:{{ item }}" wx:for="{{stringArray}}" wx:key="*this" />
},

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

3、通配符+名字

用wx:key和不用对比

wk:key 组件识别 渲染情况 状态情况 for效率
各组件可识别 渲染时仅改变组件顺序 保持组件之前原来状态 效率高
组件无法识别 渲染时重新创建各组件 重置组件的初始状态 效率低

1.需要wx:key的情况

列表中项目的位置会动态改变或者有新的项目添加到列表中

希望列表中的项目保持自己的特征和状态

(如 <input/> 中的输入内容,<switch/> 的选中状态)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 遮罩层实现(mask)实现代码
Jan 09 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
Nov 25 Javascript
JavaScript的漂亮的代码片段
Jun 05 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
js获取多个tagname的节点数组
Sep 22 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
JavaScript 事件对象介绍
Apr 13 Javascript
详解jQuery中的empty、remove和detach
Apr 11 Javascript
jQuery中map函数的两种方式
Apr 07 jQuery
js链表操作(实例讲解)
Aug 29 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 22 Javascript
原生js实现下拉选项卡
Nov 27 #Javascript
浅析Vue下的components模板使用及应用
Nov 27 #Javascript
d3.js 地铁轨道交通项目实战
Nov 27 #Javascript
微信小程序表单验证WxValidate的使用
Nov 27 #Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 #Javascript
微信小程序加载机制及运行机制图解
Nov 27 #Javascript
webgl实现物体描边效果的方法介绍
Nov 27 #Javascript
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
亲密接触PHP之PHP语法学习笔记1
2006/12/17 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
js实现分割上传大文件
2016/03/09 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
基于JSON数据格式详解
2017/08/31 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
Python实现Event回调机制的方法
2019/02/13 Python
基于树莓派的语音对话机器人
2019/06/17 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
军训自我鉴定怎么写
2014/02/13 职场文书
班主任寄语大全
2014/04/04 职场文书
诚信承诺书模板
2014/05/26 职场文书
介绍信格式样本
2015/05/05 职场文书
交通事故被告答辩状
2015/05/22 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB