javascript - react native Webview : How to trigger function once on onScroll?

标签 javascript reactjs react-native

我想在滚动位置触发重新加载功能。我将下面的代码设置为在 contentOffset.y 小于 -180 时触发重新加载,但随着 contentOffset.y 的位置不断变化,它会被多次触发。

如何确保只触发一次重新加载?

_onScroll = (event) => {
  if (event.nativeEvent.contentOffset.y < -180) {
    this.webView.ref && this.webView.ref.reload();
    console.log("Triggered multiple times as event.nativeEvent.contentOffset.y is keep changing")
  }
};

这是获取滚动位置的 WebView。

<WebView
  bounces={true}
  onScroll={this._onScroll}
/>

最佳答案

您需要一种方法来告诉您的组件您已经运行了滚动重新加载,然后仅在之前未运行过的情况下运行重新加载功能。 执行此操作的最佳方法是在组件的状态下:

_onScroll = (event) => {
  if (event.nativeEvent.contentOffset.y < -180) {
    !this.state.scrollReloaded && this.webView.ref && this.webView.ref.reload();
    this.setState({ scrollReloaded: true });
  }
};

上述解决方案有效但性能不佳; _onScroll 仍然会在我们每次滚动时被调用。这为您提供了额外的灵 active ,但对 CPU 的要求更高。为了稍微更好的性能,您可以添加:

<WebView
  bounces={true}
  onScroll={e => !this.state.scrollReloaded && this._onScroll(e)}
/>

关于javascript - react native Webview : How to trigger function once on onScroll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62414833/

相关文章:

javascript - 如何在 childsnapshot 完成执行后调用函数

javascript - 无法修改计时器间隔函数以在 JavaScript 中给出总持续时间

css - 为什么我的颜色被 css-modules 覆盖了?

javascript - Firebase 值已正确提取但无法访问?

reactjs - 当条件满足时,触发状态变化的函数

react-native - 如何在有错误的项目中使用外部库?

javascript - 在 Javascript 中从堆栈读取元素而不丢失它们

javascript - 缓出计数器

javascript - 数组总是获取每个元素的最后一个值

css - 如何将渐变 CSS 添加到 Nivo Rocks 折线图区域?