• 微信小程序の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/> 的选中状态)

  • 相关阅读:
    base64和Blob的相互转换
    限制文件上传的大小和尺寸
    git将本地项目提交到github
    vue-cli3创建项目时报错
    运行项目是node-sass报错的解决方法
    classList的使用
    将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组
    移动端的图片放大
    js获取url中的参数
    HTML5-canvas
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/11935630.html
Copyright © 2020-2023  润新知