-
Notifications
You must be signed in to change notification settings - Fork 1
/
ExampleTab.tsx
79 lines (69 loc) · 1.98 KB
/
ExampleTab.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import React, { useCallback } from "react";
import {
FlatList,
NativeSyntheticEvent,
NativeScrollEvent,
StyleProp,
ViewStyle,
ListRenderItem,
Text,
View
} from "react-native";
import Animated from "react-native-reanimated";
const AnimatedFlatList = Animated.createAnimatedComponent(FlatList);
const ITEM_MARGIN_BOTTOM = 10;
const ITEM_WIDTH = 200;
const ITEM_HEIGHT = 200;
const Item: React.FC<{ number: number }> = React.memo(({ number }) => (
<View
style={{
flex: 1,
justifyContent: "center",
alignSelf: "center",
alignItems: "center",
marginBottom: ITEM_MARGIN_BOTTOM,
width: ITEM_WIDTH,
height: ITEM_HEIGHT,
backgroundColor: `rgb(${Math.round(Math.random() * 256)}, ${Math.round(
Math.random() * 256
)}, ${Math.round(Math.random() * 256)})`
}}
>
<Text>{number}</Text>
</View>
));
interface ExampleTabProps {
scrollContentContainerStyle?: StyleProp<ViewStyle>;
onScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
}
const fakeData = Array.from(Array(100).keys());
const ExampleTab = React.memo(
React.forwardRef<FlatList<any>, ExampleTabProps>(
({ scrollContentContainerStyle, onScroll }, ref) => {
const renderItem: ListRenderItem<number> = useCallback(info => {
return <Item number={info.item} />;
}, []);
const getItemSize = (data: number[], index: number) => ({
length: ITEM_HEIGHT,
offset: (ITEM_HEIGHT + ITEM_MARGIN_BOTTOM) * index,
index: index
});
return (
<AnimatedFlatList
ref={ref}
data={fakeData}
renderItem={renderItem}
getItemLayout={getItemSize}
keyExtractor={keyExtractor}
scrollEventThrottle={1}
onScroll={onScroll}
contentContainerStyle={[{}, scrollContentContainerStyle]}
/>
);
}
)
);
function keyExtractor(item: any, index: number): string {
return index.toString();
}
export default ExampleTab;