我现在可以工作了 :) 一切都很好。 <InfiniteLoader> 的 threshold 属性定义了预取数据时在 List 开始/结束之前的索引阈值数量,即触发 _loadMoreRows()。
在初始数据提取后,this.state.items 中的第一项和最后一项应将其对应的loadedRowsMap 设置为undefined。
const items = _getItems(); // fetch items
const rowCount = items.length;
const loadedRowsMap = [];
_.map(this.state.loadedRowsMap,(row,index)=>{
const status = (index===0 || index===rowCount-1) ? undefined : STATUS_LOADED;
loadedRowsMap.push(status)});
scrollToIndex = parseInt(rowCount/2,10);
this.setState({
items, rowCount, loadedRowsMap, scrollToIndex,
});
在显示列表之前,<List> 组件的 scrollToIndex 属性应该设置在列表的中间,即rowCount/2。这个数应该满足方程
0 + threshold < scrollToIndex < rowCount - 1 - threshold.
函数_isRowLoaded() 将检查loadedRowsMap[index]。如果设置为STATUS_LOADED 或STATUS_LOADING(InfiniteLoader 内部使用的内部常量),则不会触发_loadMoreRows()。如果设置为undefined,则触发_loadMoreRows()。
使用此设置,触发_loadMoreRows() 可在上下两个滚动方向上工作。