官方文档中给出了ListView组件数据源初始化的方式,这里主要记录一下其中构造函数中由于rowHasChanged这个参数所遇到的坑
一. ListView渲染
由于手机端设备性能远不可与PC相提并论,因此在编写手机app时对性能要求会很高,ListView考虑到了当数据列表量很大时要进行一次过滤,通过过滤的数据才会被渲染,那么ListView是如何定义过滤规则的呢?
rowHasChanged方法接收两个参数,这两个参数为数据源中数组的元素,每次渲染前都会对数组中的元素进行一次比较,判断是否有重复数据,rowHasChanged方法返回true的数据才会被渲染
二. 对象比较与深浅拷贝
如上文所写,数据源中的数据在rowHasChanged内进行比较后返回true才会被渲染,因此此时在数据为对象类型时要格外小心,引用类型比较时即使该数据内部修改成功,但是引用地址仍不会改变,例如对象类型数据内部的基本数据类型改变时仍然不会渲染
三. 引用类型比较解决方案
- 使用对象中特有的key值进行比较
- 使用深拷贝改变对象本身