微信小程序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字符串处理性能的代码
Dec 07 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
Apr 29 Javascript
Eclipse引入jquery报错如何解决
Dec 01 Javascript
Jquery获取第一个子元素简单实例
Jun 02 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
详解Vue.js中引入图片路径的几种方式
Jun 17 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 jQuery
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
JS加载解析Markdown文档过程详解
May 19 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
原生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
ThinkPHP之A方法实例讲解
2014/06/20 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
python复制与引用用法分析
2015/04/08 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
儿童生日会策划方案
2014/05/15 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
党员个人对照检查材料
2014/10/01 职场文书
甲午风云观后感
2015/06/02 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python