I want to detect what item is showing on the screen in FlatList that render an aditional view in that item after 2 seconds of focus. (like comment filed in instagram)
In the Other word, I want to render an aditional view to PostItem after 2 seconds that it's showing on the screen. I try to add setTimeout in useEfect to make that component visible. But the PostItem in FlatList and all the list render concurrently and after 2 seconds all PostItems have this component.
Is there any solution for this?
If the solution is to use onViewableItemsChanged prop in FlatList, how to implemet that with this prop?
here is my FlatList component:
const _renderItem: ListRenderItem<Post> = ({item}) => {
return <PostItem {...item} />;
};
<FlatList
data={data}
keyExtractor={keyExtractor}
renderItem={_renderItem}
onEndReached={_onEndReached}
onEndReachedThreshold={0.2}
contentContainerStyle={styles.list}
/>
CodePudding user response:
You can get the index of the element and find it in your data array using
const onItemIndexChange = useCallback(setHourIndex, []);
const ITEM_HEIGHT = height_of_one_item_rendered
onMomentumScrollEnd={(ev) => {
const newIndex = Math.round(ev.nativeEvent.contentOffset.y / ITEM_HEIGHT);
if (onItemIndexChangeHour) {
onItemIndexChange(newIndex 1);
}
}}
CodePudding user response:
You can wrap your renderItem with visibility sensor component
https://www.npmjs.com/package/@svanboxel/visibility-sensor-react-native
CodePudding user response:
You can use onViewableItemsChanged Flatlist property https://reactnative.dev/docs/flatlist#onviewableitemschanged
