如何滚动到 FlatList 中单击列表项的索引
How to scroll to index of clicked list item in FlatList
我有一个反应本机 FlatList,当单击该列表中的项目时,我希望页面滚动到该列表项目的顶部(因此项目的顶部现在位于page/screen)。我一直在使用 scrollToIndex。我向 renderItem 添加了一个 onPress,它调用了一个函数“onClickItem”。我已将 scrollToIndex 放入该函数中,并传入了被单击项目的索引。虽然这不起作用。请问我哪里错了?
import React from 'react';
import { View, FlatList, StyleSheet} from 'react-native';
import { NavigationEvents } from 'react-navigation';
import SwipeableCard from './SwipeableCard';
class Tab extends React.Component {
constructor(props) {
super(props)
this.state = {
currentTab: null,
records: [],
selectedRecords: [],
pageOffset: 0,
pageSize: 10,
searchQuery: null,
}
this.listRef = null
this.searchRef = null
}
renderTabItem = ({ item, index }) =>
<SwipeableCard
onPress={ () => this.onClickItem(item, index)}
/>
onClickItem(item, index){
this.listRef.scrollToIndex({index})
}
render() {
return (
<>
<FlatList
ref={ref => this.listRef = ref}
style={{ paddingTop: 8 }}
initialNumToRender={this.state.pageSize}
data={this.state.records}
onEndReachedThreshold={0}
onEndReached={this.loadMore}
keyExtractor={item => item.isNew ? 'new' : item.id}
renderItem={this.renderTabItem}
/>
</>
)
}
export default withTheme(Tab);
您目前看到的行为是什么?有没有错误?
我首先要看的是 SwipeableCard class。将 onPress 作为道具放在那里并不常见,因为它要求您在 SwipeableCard class 中有一个名为 onPress 的道具。相反,您应该用 TouchableOpacity 或 Pressable 包装 SwipeableCard,并将 onPress 函数放在那里。
如果不是这样,您需要向我展示更多您的代码。
我有一个反应本机 FlatList,当单击该列表中的项目时,我希望页面滚动到该列表项目的顶部(因此项目的顶部现在位于page/screen)。我一直在使用 scrollToIndex。我向 renderItem 添加了一个 onPress,它调用了一个函数“onClickItem”。我已将 scrollToIndex 放入该函数中,并传入了被单击项目的索引。虽然这不起作用。请问我哪里错了?
import React from 'react';
import { View, FlatList, StyleSheet} from 'react-native';
import { NavigationEvents } from 'react-navigation';
import SwipeableCard from './SwipeableCard';
class Tab extends React.Component {
constructor(props) {
super(props)
this.state = {
currentTab: null,
records: [],
selectedRecords: [],
pageOffset: 0,
pageSize: 10,
searchQuery: null,
}
this.listRef = null
this.searchRef = null
}
renderTabItem = ({ item, index }) =>
<SwipeableCard
onPress={ () => this.onClickItem(item, index)}
/>
onClickItem(item, index){
this.listRef.scrollToIndex({index})
}
render() {
return (
<>
<FlatList
ref={ref => this.listRef = ref}
style={{ paddingTop: 8 }}
initialNumToRender={this.state.pageSize}
data={this.state.records}
onEndReachedThreshold={0}
onEndReached={this.loadMore}
keyExtractor={item => item.isNew ? 'new' : item.id}
renderItem={this.renderTabItem}
/>
</>
)
}
export default withTheme(Tab);
您目前看到的行为是什么?有没有错误?
我首先要看的是 SwipeableCard class。将 onPress 作为道具放在那里并不常见,因为它要求您在 SwipeableCard class 中有一个名为 onPress 的道具。相反,您应该用 TouchableOpacity 或 Pressable 包装 SwipeableCard,并将 onPress 函数放在那里。
如果不是这样,您需要向我展示更多您的代码。