ListViewDataSource
ListViewDataSource
提供有效的数据处理和对ListView
组件的访问。A的ListViewDataSource
功能是从输入blob提取数据,并比较元素(为了方便,默认实现)。输入blob可以像字符串数组一样简单,或者具有嵌套在段对象内的行的对象。
要更新数据源中的数据,请使用cloneWithRows
(或者cloneWithRowsAndSections
如果您关心部分)。数据源中的数据是不可变的,所以您不能直接修改它。克隆方法吸收新数据并计算每行的差异,以便ListView知道是否重新呈现它。
在这个例子中,一个组件接收数据块,由其处理_onDataArrived
,将新数据连接到旧数据并更新数据源。我们concat
用来创建一个新的数组 - this._data
例如,使用变异this._data.push(newRowData)
将是一个错误。_rowHasChanged
了解行数据的形状并知道如何有效地比较它。
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
为节标题和行提供自定义提取和功能。如果不存在,数据将使用defaultGetRowData
和defaultGetSectionHeaderData
函数提取。
默认提取器需要以下格式之一的数据:
{ sectionID_1: { rowID_1: <rowData1>, ... }, ... }
或者
{ sectionID_1: [ <rowData1>, <rowData2>, ... ], ... }
或者
[ [ <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的密钥是节标识。
注意:这会返回一个新的对象!
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)
获取呈现节标题所需的数据