微信小程序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 instanceof 内部机制探析
Oct 15 Javascript
javascript中的作用域scope介绍
Dec 28 Javascript
js获取事件源及触发该事件的对象
Oct 24 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
Nov 25 Javascript
全面解析Bootstrap弹窗的实现方法
Dec 01 Javascript
JavaScript获取当前cpu使用率的方法
Dec 15 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
Jul 07 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
Sep 10 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
Nov 15 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 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四舍五入精确小数位及取整
2014/01/14 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
jquery validate demo 基础
2015/10/29 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
python3处理含有中文的url方法
2018/05/10 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
python dumps和loads区别详解
2020/02/04 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
仓库管理专业个人自我评价范文
2013/11/11 职场文书
个人教师自我评价范文
2013/12/02 职场文书
小学运动会表扬稿
2014/01/19 职场文书
机关办公室岗位职责
2014/04/16 职场文书
2014年食堂工作总结
2014/11/20 职场文书
2014年技术部工作总结
2014/12/12 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL