gpt4 book ai didi

reactjs - 在SectionList上执行scrollToLocation时发生崩溃

转载 作者:行者123 更新时间:2023-12-03 13:58:31 26 4
gpt4 key购买 nike

我们的应用程序中有一个边缘情况。 UI 呈现后,用户尝试滚动到某个部分后,它会抛出 scrolltoindex should be use in joint with getitemlayout or on scrolltoindex failed。现在,只有当他在 UI 渲染后立即执行此操作时,才会发生这种情况。

_scrollToSection = index => {
setTimeout(() => {
this.list.scrollToLocation({
animated: true,
itemIndex: -1,
sectionIndex: index,
viewPosition: 0
});
}, 150);
};

部分列表渲染:

        <SectionList
sections={this.props.sections}
extraData={this.props.subscriber}
ref={ref => {
if (ref) {
this.list = ref;
}
}}
automaticallyAdjustContentInsets={true}
contentInsetAdjustmentBehavior={'automatic'}
windowSize={100}
ListHeaderComponent={this.props.header || null}
ItemSeparatorComponent={() => (
<Separator
style={[mediumStyle.separatorEnd, { backgroundColor: IOS_GREY_02_03 }]}
/>
)}
renderSectionFooter={() => <View style={{ height: 17 }} />}
keyExtractor={(item, index) => index}
removeClippedSubviews={false}
stickySectionHeadersEnabled={true}
renderSectionHeader={({ section }) => (
<SectionTitle title={section.title} theme={this.props.theme} />
)}
renderItem={this._renderItem}
onEndReachedThreshold={0}
onEndReached={() => HapticFeedback.trigger()}
scrollEventThrottle={16}
/>

我尝试用谷歌搜索原因,但没有成功找到仅过时和已关闭的问题,而没有解决方案。其他人也发生过这种情况吗?你是怎么修好的?

更新:我们提出了一个恒定项目大小的解决方案,该解决方案还考虑了可访问性比例因子。因此,我们有一个可以在 getItemLayout 中使用的项目和标题大小。一切都按预期工作,但是 SectionList 出现了故障。当我们滚动到较低部分时,列表本身会跳动,没有任何交互。到目前为止,我们最好的解决方案是在 native 代码中自己构建节列表并使用它而不是 RN 列表。

最佳答案

您收到此错误是因为scrollToIndex 失败并且您尚未实现getItemLayoutonScrollToIndexFailed

<小时/>节列表中的

getItemLayout 设置起来并不那么有趣,但是这篇中等文章介绍了如何做到这一点 https://medium.com/@jsoendermann/sectionlist-and-getitemlayout-2293b0b916fb

他们建议react-native-section-list-get-item-layout来计算布局的大小https://github.com/jsoendermann/rn-section-list-get-item-layout

<小时/>

onScrollToIndexFailed 更容易设置,您可以添加 Prop onScrollToIndexFailed={(info) => {/* 在这里处理错误/*/}} 您可以捕获错误,然后决定如何处理它。

<小时/>

我还会添加一个检查,以确保在调用 scrollToLocation 函数之前对 this.list 的引用存在。像这样的东西。

_scrollToSection = index => {
setTimeout(() => {
if (this.list) {
this.list.scrollToLocation({
animated: true,
itemIndex: -1,
sectionIndex: index,
viewPosition: 0
});
}
}, 150);
};

关于reactjs - 在SectionList上执行scrollToLocation时发生崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com