【React Native】文件翻譯閱讀紀錄 - APIs - ListViewDataSource

by - 上午9:00

Facebook Open Source React Native


ListViewDataSource

提供有效的數據處理和對ListView組件的訪問。創建一個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)
  });
}

Methods


參考

Methods

constructor()

constructor(params);
您可以為節標題和行提供自定義提取和 hasChanged 函數。如果不存在,將使用 defaultGetRowData 和 defaultGetSectionHeaderData 函數提取數據。
默認提取器需要以下形式之一的數據:
 { sectionID_1: { rowID_1: <rowData1>, ... }, ... }
or
 { sectionID_1: [ <rowData1>, <rowData2>, ... ], ... }
or
 [ [ <rowData1>, <rowData2>, ... ], ... ]
構造函數接受一個 params 參數,該參數可以包含以下任何內容:
  • getRowData(dataBlob, sectionID, rowID);
  • getSectionHeaderData(dataBlob, sectionID);
  • rowHasChanged(prevRowData, nextRowData);
  • sectionHeaderHasChanged(prevSectionData, nextSectionData);

cloneWithRows()

cloneWithRows(dataBlob, rowIdentities);
使用指定的dataBlob和rowIdentities克隆此ListViewDataSource。 dataBlob只是一個任意數據塊。在構造時,定義了獲取有趣信息的提取器(或使用了默認值)。

rowIdentities是行的標識符的2D數組。即。 [['a1','a2'],['b1','b2','b3'],...]。如果未提供,則假定區段數據的鍵是行標識。

注意:此函數不克隆此數據源中的數據。它只是將構造中定義的函數傳遞給指定數據的新數據源。如果您希望維護現有數據,則必須分別處理舊數據和新數據的合併,然後將其作為dataBlob傳遞給此函數。

cloneWithRowsAndSections()

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()

getRowCount();
返回數據源中的總行數。

如果要指定 rowIdentities 或 sectionIdentities,則 getRowCount 將返回已過濾數據源中的行數。

getRowAndSectionCount()

getRowAndSectionCount();
返回數據源中的總行數(請參閱getRowCount,了解其計算方式)以及數據中的節數。

如果要指定rowIdentities或sectionIdentities,則getRowAndSectionCount將返回已過濾數據源中的行數和節數。

rowShouldUpdate()

rowShouldUpdate(sectionIndex, rowIndex);
如果行被弄髒並需要重新渲染,則返回

getRowData()

getRowData(sectionIndex, rowIndex);
獲取呈現行所需的數據。

getRowIDForFlatIndex()

getRowIDForFlatIndex(index);
如果 dataSource 數組被展平,則獲取索引處的 rowID,或者超出範圍索引的null。

getSectionIDForFlatIndex()

getSectionIDForFlatIndex(index);
如果 dataSource 數組被展平,則獲取索引處提供的 sectionID ;如果超出範圍索引,則獲取null。

getSectionLengths()

getSectionLengths();
返回包含每個節中的行數的數組

sectionHeaderShouldUpdate()

sectionHeaderShouldUpdate(sectionIndex);
返回部分標題是否變髒並需要重新呈現

getSectionHeaderData()

getSectionHeaderData(sectionIndex);
獲取呈現節標題所需的數據


You May Also Like

0 意見