微信小程序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进阶教程(第四课第一部分)
Apr 05 Javascript
自己的js工具 Event封装
Aug 21 Javascript
学习ExtJS TextField常用方法
Oct 07 Javascript
防止动态加载JavaScript引起的内存泄漏问题
Oct 08 Javascript
ExtJS DOM元素操作经验分享
Aug 28 Javascript
jquery获取css的color值返回RGB的方法
Dec 18 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
Mar 01 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 Javascript
js实现带简单弹性运动的导航条
Feb 22 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
js实现头像上传并且可预览提交
Dec 25 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 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
Python多线程编程简单介绍
2015/04/13 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Python实现优先级队列结构的方法详解
2016/06/02 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
django框架F&amp;Q 聚合与分组操作示例
2019/12/12 Python
python类中super() 的使用解析
2019/12/19 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
《要下雨了》教学反思
2014/02/17 职场文书
高中综合实践活动总结
2014/07/07 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书