React native 反应本机:在scrollToLocation之后,优化的SectionList不会重新加载

React native 反应本机:在scrollToLocation之后,优化的SectionList不会重新加载,react-native,expo,React Native,Expo,我建立了一个字母洗涤器,滚动一个分区列表。SectionList通过使用getItemLayout进行优化。如果我擦洗字母表,滚动会按计划进行,但是在我将手指从屏幕上松开之前,分区列表不会重新启动 有人知道如何解决这个问题吗 要动态更新分区列表,您需要将数据置于其使用状态。这个世博会的例子(由其他人完成)是一个很好的例子: 他的panResponder的所有数据都处于状态,在每个“handlePanResponderMove”上,他调用setState()在每次移动时更新位置。总而言之,如果

我建立了一个字母洗涤器,滚动一个分区列表。SectionList通过使用getItemLayout进行优化。如果我擦洗字母表,滚动会按计划进行,但是在我将手指从屏幕上松开之前,分区列表不会重新启动

有人知道如何解决这个问题吗


要动态更新分区列表,您需要将数据置于其使用状态。这个世博会的例子(由其他人完成)是一个很好的例子:

他的panResponder的所有数据都处于状态,在每个“handlePanResponderMove”上,他调用setState()在每次移动时更新位置。总而言之,如果您的数据未处于状态,它将不会为您动态更新。将数据置于React Native状态是它动态跟踪数据更改的方式


希望这有帮助

通过查看PanResponder的源代码解决了这个问题。PanResponder通过InteractionManager设置交互句柄。您可以通过
this.panResponder.getInteractionHandle()
(未记录的功能)访问此句柄,然后每次滚动到节列表中的某个位置时将其清除:

if (this.panResponder.getInteractionHandle()) {
    InteractionManager.clearInteractionHandle(
        this.panResponder.getInteractionHandle()
    );
}
这将在队列中向上移动SectionList,以便进行可见性计算和渲染


我建议通过尽可能少地清除交互句柄来对此进行大量优化,因为使用InteractionManager是出于性能原因。

Hi@Gersom。如果您能对我以上的回答给予一些反馈,我将不胜感激。试图获得更多的代表积分。如果您有问题,请告诉我!:)SectionList应该知道它应该重新加载,因为它的scrollToLocation方法被调用。当你抬起屏幕的手指时,它就工作了,并且没有任何状态变化。我很感谢你花时间回答,但我正在寻找一个解决方案,希望它能在不使用setState技巧的情况下工作:)@Gersom没问题。但国家不是一个骗局,它是React原生框架的一部分“对于将要更改的数据,我们必须使用状态。”。您的数据在滚动时正在加载。因此,当您平移时,您的数据正在发生变化。根据我的链接,您需要使用状态来跟踪此问题。已尝试您的解决方案,但该解决方案无效;)SectionList决定渲染哪些项的原因不仅仅受父组件状态更改的影响。或者至少当手指触摸屏幕时不会。我还尝试调用component.forceUpdate()。@Gersom Cool很抱歉,它不起作用!:)我以前没有使用过panResponder组件,所以我不确定它是如何工作的。出于某种原因,它可能只对触摸释放做出响应。祝你好运!:)很好的解决方案!他们显然需要更多地记录这一点。很高兴听到你解决了这个问题:)