【React Native】文件翻譯閱讀紀錄 - APIs - ListViewDataSource
Facebook Open Source React Native |
ListViewDataSource
提供有效的數據處理和對ListView組件的訪問。創建一個ListViewDataSource,其函數用於從輸入blob中提取數據,並比較元素(為方便起見,使用默認實現)。輸入blob可以像字符串數組一樣簡單,也可以是嵌套在節對象內的行的對象。
要更新數據源中的數據,請使用cloneWithRows(如果您關心部分,請使用cloneWithRowsAndSections)。數據源中的數據是不可變的,因此您無法直接修改它。克隆方法吸收新數據併計算每行的差異,以便ListView知道是否重新渲染它。
在此示例中,組件以塊的形式接收數據,由_onDataArrived處理,該數據將新數據連接到舊數據並更新數據源。我們使用concat來創建一個新數組 - 改變this._data,例如使用this._data.push(newRowData),將是一個錯誤。 _rowHasChanged了解行數據的形狀,並知道如何有效地比較它。
要更新數據源中的數據,請使用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
constructor
cloneWithRows
cloneWithRowsAndSections
getRowCount
getRowAndSectionCount
rowShouldUpdate
getRowData
getRowIDForFlatIndex
getSectionIDForFlatIndex
getSectionLengths
sectionHeaderShouldUpdate
getSectionHeaderData
參考
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傳遞給此函數。
rowIdentities是行的標識符的2D數組。即。 [['a1','a2'],['b1','b2','b3'],...]。如果未提供,則假定區段數據的鍵是行標識。
注意:此函數不克隆此數據源中的數據。它只是將構造中定義的函數傳遞給指定數據的新數據源。如果您希望維護現有數據,則必須分別處理舊數據和新數據的合併,然後將其作為dataBlob傳遞給此函數。
cloneWithRowsAndSections()
cloneWithRowsAndSections(dataBlob, sectionIdentities, rowIdentities);
它執行與cloneWithRows函數相同的功能,但在這裡您還指定了sectionIdentities的內容。如果你不關心部分,你應該安全地使用cloneWithRows。
sectionIdentities是節的標識符數組。即。 ['s1','s2',...]。標識符應對應於您希望包含的數據的鍵或數組索引。如果未提供,則假定dataBlob的鍵是節標識。
注意:這會返回一個新對象!
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 將返回已過濾數據源中的行數。
如果要指定 rowIdentities 或 sectionIdentities,則 getRowCount 將返回已過濾數據源中的行數。
getRowAndSectionCount()
getRowAndSectionCount();
返回數據源中的總行數(請參閱getRowCount,了解其計算方式)以及數據中的節數。
如果要指定rowIdentities或sectionIdentities,則getRowAndSectionCount將返回已過濾數據源中的行數和節數。
如果要指定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);
獲取呈現節標題所需的數據
0 意見