微信小程序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 相关文章推荐
JS+CSS实现模仿浏览器网页字符查找功能的方法
Feb 26 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
jquery实现动静态条形统计图
Aug 17 Javascript
jquery.validate提示错误信息位置方法
Jan 22 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
Jan 08 Javascript
javascript实现倒计时效果
Feb 17 Javascript
VUE动态生成word的实现
Jul 26 Javascript
JavaScript经典案例之简易计算器
Aug 24 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
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
深入理解Django中内置的用户认证
2017/10/06 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Python实现数字的格式化输出
2020/08/01 Python
XML文档面试题
2015/08/05 面试题
初中三年毕业生的自我评价分享
2014/02/14 职场文书
安全生产月活动总结
2014/05/04 职场文书
个人工作主要事迹
2014/05/08 职场文书
起诉意见书范文
2015/05/19 职场文书