diff --git a/native/chat/chat-thread-list.react.js b/native/chat/chat-thread-list.react.js
--- a/native/chat/chat-thread-list.react.js
+++ b/native/chat/chat-thread-list.react.js
@@ -126,6 +126,7 @@
   ) => Promise<$ReadOnlyArray<GlobalAccountUserInfo>>,
   +onChangeSearchText: (searchText: string) => Promise<void>,
   +scrollPos: { current: number },
+  +onScroll: (event: ScrollEvent) => void,
 };
 
 class ChatThreadList extends React.PureComponent<Props> {
@@ -419,7 +420,7 @@
           extraData={extraData}
           initialNumToRender={11}
           keyboardShouldPersistTaps="handled"
-          onScroll={this.onScroll}
+          onScroll={this.props.onScroll}
           style={this.props.styles.flatList}
           indicatorStyle={this.props.indicatorStyle}
           scrollEnabled={scrollEnabled}
@@ -436,17 +437,6 @@
     this.flatList = flatList;
   };
 
-  onScroll = (event: ScrollEvent) => {
-    const oldScrollPos = this.props.scrollPos.current;
-    this.props.scrollPos.current = event.nativeEvent.contentOffset.y;
-    if (this.props.scrollPos.current !== 0 || oldScrollPos === 0) {
-      return;
-    }
-    if (this.props.searchStatus === 'activating') {
-      this.props.setSearchStatus('active');
-    }
-  };
-
   onPressItem = (
     threadInfo: ThreadInfo,
     pendingPersonalThreadUserInfo?: UserInfo,
@@ -600,6 +590,20 @@
 
   const scrollPos = React.useRef(0);
 
+  const onScroll = React.useCallback(
+    (event: ScrollEvent) => {
+      const oldScrollPos = scrollPos.current;
+      scrollPos.current = event.nativeEvent.contentOffset.y;
+      if (scrollPos.current !== 0 || oldScrollPos === 0) {
+        return;
+      }
+      if (searchStatus === 'activating') {
+        setSearchStatus('active');
+      }
+    },
+    [searchStatus],
+  );
+
   return (
     <ChatThreadList
       navigation={navigation}
@@ -631,6 +635,7 @@
       searchUsers={searchUsers}
       onChangeSearchText={onChangeSearchText}
       scrollPos={scrollPos}
+      onScroll={onScroll}
     />
   );
 }