首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ListViewDataSource

提供有效的数据处理和对ListView组件的访问。A的ListViewDataSource功能是从输入blob提取数据,并比较元素(为了方便,默认实现)。输入blob可以像字符串数组一样简单,或者具有嵌套在段对象内的行的对象。

要更新数据源中的数据,请使用cloneWithRows(或者cloneWithRowsAndSections如果您关心部分)。数据源中的数据是不可变的,所以您不能直接修改它。克隆方法吸收新数据并计算每行的差异,以便ListView知道是否重新呈现它。

在这个例子中,一个组件接收数据块,由其处理_onDataArrived,将新数据连接到旧数据并更新数据源。我们concat用来创建一个新的数组 - this._data例如,使用变异this._data.push(newRowData)将是一个错误。_rowHasChanged了解行数据的形状并知道如何有效地比较它。

代码语言:javascript
复制
getInitialState: function() {
  var ds = new ListView.DataSource({rowHasChanged: this._rowHasChanged});
  return {ds};
},
_onDataArrived(newData) {
  this._data = this._data.concat(newData);
  this.setState({
    ds: this.state.ds.cloneWithRows(this._data)
  });
}

方法

constructor(params)

您可以hasChanged为节标题和行提供自定义提取和功能。如果不存在,数据将使用defaultGetRowDatadefaultGetSectionHeaderData函数提取。

默认提取器需要以下格式之一的数据:

代码语言:javascript
复制
 { sectionID_1: { rowID_1: <rowData1>, ... }, ... }

或者

代码语言:javascript
复制
 { sectionID_1: [ <rowData1>, <rowData2>, ... ], ... }

或者

代码语言:javascript
复制
 [ [ <rowData1>, <rowData2>, ... ], ... ]

构造函数接受一个params参数,该参数可以包含以下任何一个参数:

  • getRowData(dataBlob,sectionID,rowID);
  • getSectionHeaderData(dataBlob, sectionID);
  • rowHasChanged(prevRowData, nextRowData);
  • sectionHeaderHasChanged(prevSectionData, nextSectionData);

cloneWithRows(dataBlob, rowIdentities)

ListViewDataSource用指定的dataBlob和克隆这个rowIdentities。这dataBlob只是一个任意的数据。在构建过程中,获取有趣信息的提取器已定义(或使用默认值)。

rowIdentities是行的标识符的二维数组。即。['a1','a2','b1','b2','b3',...]。如果未提供,则假定段数据的键是行标识。

注意:此功能不会克隆此数据源中的数据。它只是将构造中定义的函数传递给指定数据的新数据源。如果你想维护现有的数据,你必须分别合并旧的和新的数据,然后把它作为参数传递给这个函数dataBlob

cloneWithRowsAndSections(dataBlob, sectionIdentities, rowIdentities)

这与函数执行相同的功能,cloneWithRows但在这里您还指定了自己的sectionIdentities功能。如果你不关心你应该安全使用的部分cloneWithRows

sectionIdentities是部分的标识符数组。即。's1','s2',....标识符应该与您希望包含的数据的键或数组索引相对应。如果未提供,则假定dataBlob的密钥是节标识。

注意:这会返回一个新的对象!

代码语言:javascript
复制
const dataSource = ds.cloneWithRowsAndSections({
  addresses: ['row 1', 'row 2'],
  phone_numbers: ['data 1', 'data 2'],
}, ['phone_numbers']);

getRowCount()

返回数据源中的总行数。

如果您指定rowIdentities或sectionIdentities,getRowCount则将返回已过滤数据源中的行数。

getRowAndSectionCount()

返回数据源中的总行数(请参阅getRowCount计算方法)以及数据中的部分数量。

如果您正在指定rowIdentities或sectionIdentities,getRowAndSectionCount则会返回已过滤数据源中的行数和部分数量。

rowShouldUpdate(sectionIndex, rowIndex)

如果行被弄脏并需要重新渲染,则返回

getRowData(sectionIndex, rowIndex)

获取呈现该行所需的数据。

getRowIDForFlatIndex(index)

获取在索引处提供的rowID,如果dataSource数组已平展,或者null超出范围索引。

getSectionIDForFlatIndex(index)

如果dataSource数组已平展,则获取索引处的sectionID;如果超出范围索引,则获取null。

getSectionLengths()

返回包含每个节中的行数的数组

sectionHeaderShouldUpdate(sectionIndex)

如果节标题变脏并需要重新渲染,则返回

getSectionHeaderData(sectionIndex)

获取呈现节标题所需的数据

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com