微信小程序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 相关文章推荐
javascript Zifa FormValid 0.1表单验证 代码打包下载
Jun 08 Javascript
JavaScript 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
Jquery 弹出层插件实现代码
Oct 24 Javascript
javascript在事件监听方面的兼容性小结
Apr 07 Javascript
5个javascript的数字格式化函数分享
Dec 07 Javascript
node.js中的console.assert方法使用说明
Dec 10 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
详解javascript立即执行函数表达式IIFE
Feb 13 Javascript
JavaScript模块模式实例详解
Oct 25 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 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
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
PHP整合PayPal支付
2015/06/11 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
javascript实现控制div颜色
2015/07/07 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
JS实现小米轮播图
2020/09/21 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
python字典序问题实例
2014/09/26 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
分析python切片原理和方法
2017/12/19 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python笔记之facade模式
2019/11/20 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
护士辞职信范文
2014/01/19 职场文书
病人慰问信范文
2015/02/15 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
2015年仓库工作总结
2015/04/09 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
SpringBoot整合Minio文件存储
2022/04/03 Java/Android