我想向我的应用程序添加一个 SectionList,以便它呈现到特定部分(这不是列表中的第一个部分(。在组件DidMount上调用scrollToLocation不起作用;但是,添加调用 scrollToLocation 的按钮确实如此。这有什么原因吗?
这可能是由于 SectionList 引用(我已经尝试了一些分配引用的方法,例如变量赋值、函数赋值、使用 createRef 等(?
这里有一个精简的世博会小吃的链接,以说明我的意思:https://snack.expo.io/@bobbymoogs/scrolltolocation-on-componentdidmount。
我发现这个线程上的最佳解决方案是使用onLayout
触发滚动:
scrollToInitialPosition = () => {
this.scrollViewRef.scrollTo({ y: 100 });
}
...
<ScrollView
ref={(ref) => { this.scrollViewRef = ref; }}
onLayout={this.scrollToInitialPosition}
/>
请注意,还有很多其他建议使用setTimeout
、componentDidUpdate
、InteractionManager
等。然而,使用 onLayout 是唯一对我有用的(在我看来也是最干净的(。