Course contentsShow
← React Native
Lesson 189 of 1,5553. Core Primitive ComponentsFree lesson

Managing List Scroll Positions

Learners will track and manipulate user scroll state to build scroll-aware animations.

In this lesson, you will learn how to track the user's scroll position in real-time to create interactive, scroll-aware components.

When building lists, you often need to know exactly how far the user has scrolled. Whether you want to fade out a header when scrolling down or reveal a "back to top" button, the secret lies in capturing the onScroll event provided by FlatList or ScrollView.

Capturing Scroll Events

The onScroll prop fires continuously as a user moves through your list. It provides an event object containing a contentOffset property, which gives us the y coordinate (vertical distance from the top).

To track this, we store the value in a state variable so our UI can react whenever the number changes:

const [scrollPosition, setScrollPosition] = useState(0);

<FlatList
  data={data}
  onScroll={(event) => {
    const offsetY = event.nativeEvent.contentOffset.y;
    setScrollPosition(offsetY);
  }}
  scrollEventThrottle={16} // Ensures the event fires smoothly
  renderItem={({item}) => <Text>{item.title}</Text>}
/>

The Power of Throttle

Notice the scrollEventThrottle={16} prop. By default, scroll events might fire too rapidly, which can lead to performance issues if you try to update the UI on every single micro-movement. Setting this to 16 (roughly 60 frames per second) tells React Native to send the scroll position update at a steady, manageable rate, preventing your app from lagging while providing a smooth experience.

Building Scroll-Aware UI

Once you have the scrollPosition in state, you can use it to build dynamic interfaces. For example, you could conditionally render a button only if scrollPosition > 200. Since the state updates every time the user scrolls, your component will automatically re-render to hide or show that button based on the user's current progress through your content.

Key Takeaway: By combining the onScroll event with a state variable and a controlled scrollEventThrottle, you can programmatically react to a user’s scroll position to build sophisticated, interactive list experiences.