1.FlatList可以渲染多条数据,ListHeaderComponent={header组件},如果想让header组件带有粘性,就用stickyHeaderIndices={[0]},如果想有好几条数据粘性,就在数组里加[0,2,3...](发现很多ScrollView 的方法,FlatList是可以使用到,FlatList是基于ScrollView写的)
2.如果想要使用点击后滚动到某一个数据,scrollToIndex必须搭配使用ref,getItemLayout。
<FlatList
data={data}
ListHeaderComponent={<Header/>}
stickyHeaderIndices={[0]}
renderItem={({ item }) => (
<View>{item.a}</View>
)}
ref={flatListRef} //滚动到指定index的item如果不设置getItemLayout属性的话,无法跳转到当前可视区域以外的位置
getItemLayout={getItemLayout}
/>
const getItemLayout = (_data: any, index: number) => ({ length: 单条数据盒子高度, offset: 单条数据盒子高度 * index, index });
const scrollToIndex = useCallback(() => {
const index = data.findIndex((item) => item.id === current.id);//找到点击的index
if (index > 0) {
flatListRef.current?.scrollToIndex({ animated: true, index });
}
}, [current.id, data]);
useFocusEffect(
useCallback(() => {
scrollToIndex();
}, [scrollToIndex])
);
下拉刷新刷新 大神帮忙看了半天才发现是我的FlatList 引入路径有问题,导致的下拉刷新不能使用,所以注意,是从react-native里导入....
<>
<Header />
<FlatList
data={data}
renderItem={({ item }) => (
<View >item</View>
)}
ref={flatListRef}
getItemLayout={getItemLayout}
refreshing={refreshing}
onRefresh={loadData}
/>
</>
const [refreshing, setRefreshing] = useState(false); // 下拉刷新状态
const loadData = useCallback(async () => {
setRefreshing(true);
await onRefreshList();
setRefreshing(false);
}, [onRefreshList]);