onEndReachedThreshold数字
调用onEndReached的像素阈值(虚拟,非物理)。 所以我只是想知道它意味着什么,是从顶部开始的阈值,还是从底部开始的阈值。
从顶部? - 如果我设置了onEndReachedThreshold = {10}的值,我的onEndReached会在我滚动到10像素或其他内容时立即调用。
从底部? - 如果我设置onEndReachedThreshold = {listview height -10}的值,我的onEndReached会在我滚动到10像素或其他内容时立即调用。
答案 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;的清单。但请记住,无论你要设置什么值,都不会触发直到最后一个元素被渲染。