什么onEndReachedThreshold真正意味着反应原生

时间:2016-09-07 09:37:44

标签: android listview react-native

from documentation

  

onEndReachedThreshold数字

调用onEndReached的像素阈值(虚拟,非物理)。  所以我只是想知道它意味着什么,是从顶部开始的阈值,还是从底部开始的阈值。

从顶部? - 如果我设置了onEndReachedThreshold = {10}的值,我的onEndReached会在我滚动到10像素或其他内容时立即调用。

从底部? - 如果我设置onEndReachedThreshold = {listview height -10}的值,我的onEndReached会在我滚动到10像素或其他内容时立即调用。

4 个答案:

答案 0 :(得分:17)

对于使用FlatList INSTEAD ListView 的任何人,请注意参数单位已更改。

对于ListView,它的底部是像素,但根据docs for FlatList,它是列表项底部的长度单位。

  

距离结尾多远(以列表的可见长度为单位)列表的下边缘必须来自内容的末尾才能触发onEndReached回调。因此,当内容的结尾在列表的可见长度的一半之内时,值0.5将触发onEndReached。

因此,如果您希望在用户位于当前数据集的一半时更新列表,请将值设置为0.5

答案 1 :(得分:7)

documentation始终是最好的方式:

  

onEndReached功能
  在所有行都已渲染并且列表已滚动到底部的onEndReachedThreshold 内时调用。提供了本机滚动事件。

     

onEndReachedThreshold数字
  用于调用onEndReached的像素阈值(虚拟,非物理)。

所以我看到了: 如果您执行onEndReachedThreshold ={10},如果您从底部滚动到10个像素,则会调用onEndReached

答案 2 :(得分:1)

在2020年,onEndReachedThreshold表示您在触发事件之前应从底部开始的屏幕长度数。

当我有两个全屏长度时,我使用onEndReachedThreshold = {2}触发onEndReached。

答案 3 :(得分:0)

这取决于源代码的工作原理:

const {contentLength, visibleLength, offset} = this._scrollMetrics;
const distanceFromEnd = contentLength - visibleLength - offset;
if (
  onEndReached &&
  this.state.last === getItemCount(data) - 1 &&
  distanceFromEnd < onEndReachedThreshold * visibleLength &&
  (this._hasDataChangedSinceEndReached ||
    this._scrollMetrics.contentLength !== this._sentEndForContentLength)
) {
  // Only call onEndReached once for a given dataset + content length.
  this._hasDataChangedSinceEndReached = false;
  this._sentEndForContentLength = this._scrollMetrics.contentLength;
  onEndReached({distanceFromEnd});
}

所以,首先它会在onEndReached回调中存在,如果存在,它会检查数据的最后一个元素是否被渲染(不一定是可见的),然后它会检查你是否滚动到列表的底部。

visibleLength这里是列表元素的高度(如果水平没有设置),contentLength是列表元素容器的高度乘以数据中元素的数量。   正如您所看到的, onEndReachedThreshold 是#34;可见屏幕的反馈次数&#34; (即你的列表元素的高度)你应该滚动直到你的onEndReached回调将触发 - 更大的 onEndReachedThreshold ,你应该滚动更少。使用值onEndReachedThreshold = 0.5,您的回调几乎将在&#34; end&#34;的清单。但请记住,无论你要设置什么值,都不会触发直到最后一个元素被渲染。