微信小程序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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
Dec 28 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
js获取微信版本号的方法
May 12 Javascript
JS实现的自定义网页拖动类
Nov 06 Javascript
JavaScript 函数的定义-调用、注意事项
Apr 16 Javascript
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
vue实现在v-html的html字符串中绑定事件
Oct 28 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
Terran兵种介绍
2020/03/14 星际争霸
用Flash图形化数据(二)
2006/10/09 PHP
mysql时区问题
2008/03/26 PHP
php中函数的形参与实参的问题说明
2010/09/01 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
利用python写个下载teahour音频的小脚本
2017/05/08 Python
python学习教程之使用py2exe打包
2017/09/24 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
外贸英语专业求职信范文
2013/12/25 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
男性健康日的活动方案
2014/08/18 职场文书
销售督导岗位职责
2015/04/10 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python