Skip to content

Commit 28b6ab7

Browse files
committed
fix: 优化PagerView的业务逻辑
1 parent d252083 commit 28b6ab7

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

.changeset/smooth-pans-return.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@td-design/react-native-tabs': patch
3+
---
4+
5+
fix: 优化PagerView的业务逻辑

packages/react-native-tabs/src/usePagerView.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useMemo, useRef } from 'react';
2-
import { Animated, Platform } from 'react-native';
2+
import { Animated } from 'react-native';
33
import PagerView, {
44
PagerViewOnPageScrollEventData,
55
PagerViewOnPageSelectedEvent,
@@ -11,7 +11,7 @@ import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
1111
export default function usePagerView(initialPage: number, page?: number, onChange?: (page: number) => void) {
1212
const pagerViewRef = useRef<PagerView>(null);
1313

14-
const [activePage, setActivePage] = useSafeState(page || initialPage);
14+
const [activePage, setActivePage] = useSafeState(initialPage);
1515
const [isIdle, setIdle] = useSafeState(true);
1616

1717
const setPage = useMemoizedFn((page: number, animated = true) => {
@@ -24,15 +24,17 @@ export default function usePagerView(initialPage: number, page?: number, onChang
2424
setActivePage(page);
2525
if (activePage !== page) {
2626
setIdle(false);
27+
} else {
28+
setIdle(true);
2729
}
2830
onChange?.(page);
2931
});
3032

3133
useEffect(() => {
32-
if (!isNaN(Number(page))) {
33-
setPage(Number(page));
34+
if (page !== undefined && page !== activePage) {
35+
setPage(page);
3436
}
35-
}, [page]);
37+
}, [page, activePage]);
3638

3739
const offset = useRef(new Animated.Value(initialPage)).current;
3840
const position = useRef(new Animated.Value(0)).current;
@@ -63,9 +65,7 @@ export default function usePagerView(initialPage: number, page?: number, onChang
6365
const onPageSelected = useMemoizedFn((e: PagerViewOnPageSelectedEvent) => {
6466
setActivePage(e.nativeEvent.position);
6567
onChange?.(e.nativeEvent.position);
66-
if (Platform.OS === 'ios') {
67-
setIdle(true);
68-
}
68+
setIdle(true);
6969
});
7070

7171
const [scrollState, setScrollState] = useSafeState<'idle' | 'dragging' | 'settling'>('idle');

0 commit comments

Comments
 (0)