Skip to content

Commit 93b1888

Browse files
committed
fix: memoise callbacks
1 parent b8cbd28 commit 93b1888

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

packages/react-native-bottom-tabs/src/TabView.tsx

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import React from 'react';
2-
import type { TabViewItems } from './TabViewNativeComponent';
2+
import type {
3+
OnNativeLayout,
4+
OnPageSelectedEventData,
5+
OnTabBarMeasured,
6+
TabViewItems,
7+
} from './TabViewNativeComponent';
38
import {
49
type ColorValue,
510
Image,
@@ -279,6 +284,35 @@ const TabView = <Route extends BaseRoute>({
279284
onIndexChange(index);
280285
});
281286

287+
const handleTabLongPress = React.useCallback(
288+
({ nativeEvent: { key } }: { nativeEvent: OnPageSelectedEventData }) => {
289+
const index = trimmedRoutes.findIndex((route) => route.key === key);
290+
onTabLongPress?.(index);
291+
},
292+
[trimmedRoutes, onTabLongPress]
293+
);
294+
295+
const handlePageSelected = React.useCallback(
296+
({ nativeEvent: { key } }: { nativeEvent: OnPageSelectedEventData }) => {
297+
jumpTo(key);
298+
},
299+
[jumpTo]
300+
);
301+
302+
const handleTabBarMeasured = React.useCallback(
303+
({ nativeEvent: { height } }: { nativeEvent: OnTabBarMeasured }) => {
304+
setTabBarHeight(height);
305+
},
306+
[setTabBarHeight]
307+
);
308+
309+
const handleNativeLayout = React.useCallback(
310+
({ nativeEvent: { width, height } }: { nativeEvent: OnNativeLayout }) => {
311+
setMeasuredDimensions({ width, height });
312+
},
313+
[setMeasuredDimensions]
314+
);
315+
282316
return (
283317
<BottomTabBarHeightContext.Provider value={tabBarHeight}>
284318
<NativeTabView
@@ -290,19 +324,10 @@ const TabView = <Route extends BaseRoute>({
290324
icons={renderCustomTabBar ? undefined : resolvedIconAssets}
291325
selectedPage={focusedKey}
292326
tabBarHidden={!!renderCustomTabBar}
293-
onTabLongPress={({ nativeEvent: { key } }) => {
294-
const index = trimmedRoutes.findIndex((route) => route.key === key);
295-
onTabLongPress?.(index);
296-
}}
297-
onPageSelected={({ nativeEvent: { key } }) => {
298-
jumpTo(key);
299-
}}
300-
onTabBarMeasured={({ nativeEvent: { height } }) => {
301-
setTabBarHeight(height);
302-
}}
303-
onNativeLayout={({ nativeEvent: { width, height } }) => {
304-
setMeasuredDimensions({ width, height });
305-
}}
327+
onTabLongPress={handleTabLongPress}
328+
onPageSelected={handlePageSelected}
329+
onTabBarMeasured={handleTabBarMeasured}
330+
onNativeLayout={handleNativeLayout}
306331
hapticFeedbackEnabled={hapticFeedbackEnabled}
307332
activeTintColor={activeTintColor}
308333
inactiveTintColor={inactiveTintColor}

0 commit comments

Comments
 (0)