Skip to content

Commit 14d15a3

Browse files
committed
fix: 修复picker组件在安卓设备使用物理返回键时的bug
1 parent 3f109b1 commit 14d15a3

File tree

8 files changed

+6
-30
lines changed

8 files changed

+6
-30
lines changed

.changeset/quick-bottles-fly.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-picker': minor
3+
---
4+
5+
fix: 修复picker组件在安卓设备使用物理返回键时的bug

packages/react-native-picker/src/components/WheelPicker/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,5 +171,5 @@ const snapPoint = (value: number, velocity: number, points: ReadonlyArray<number
171171
const point = value + 0.2 * velocity;
172172
const deltas = points.map(p => Math.abs(point - p));
173173
const minDelta = Math.min.apply(null, deltas);
174-
return points.filter(p => Math.abs(point - p) === minDelta)[0];
174+
return points.find(p => Math.abs(point - p) === minDelta) || points[0];
175175
};

packages/react-native-picker/src/date-picker/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ const DatePicker = forwardRef<DatePickerRef, DatePickerProps>((props, ref) => {
3939
onChange,
4040
value,
4141
displayType,
42-
visible,
4342
format,
4443
});
4544

packages/react-native-picker/src/date-picker/useDatePicker.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useEffect } from 'react';
2-
import { BackHandler } from 'react-native';
32

43
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
54
import dayjs from 'dayjs';
@@ -11,7 +10,6 @@ export default function useDatePicker({
1110
onChange,
1211
value,
1312
displayType,
14-
visible,
1513
format,
1614
}: DatePickerPropsBase & ModalPickerProps) {
1715
const [date, setDate] = useSafeState<Date | undefined>(value ?? new Date());
@@ -20,12 +18,6 @@ export default function useDatePicker({
2018
setDate(value ?? new Date());
2119
}, [value]);
2220

23-
/** 绑定物理返回键监听事件,如果当前picker是打开的,返回键作用是关闭picker,否则返回上一个界面 */
24-
useEffect(() => {
25-
const sub = BackHandler.addEventListener('hardwareBackPress', () => visible);
26-
return () => sub.remove();
27-
}, [visible]);
28-
2921
const handleChange = (date?: Date) => {
3022
setDate(date);
3123
if (displayType === 'view') {

packages/react-native-picker/src/picker/components/Cascade/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ function Cascader<T>({
2828
data,
2929
cols,
3030
value,
31-
visible,
3231
onChange,
3332
onClose,
3433
});

packages/react-native-picker/src/picker/components/Cascade/useCascader.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useEffect, useMemo } from 'react';
2-
import { BackHandler } from 'react-native';
32

43
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
54
import arrayTreeFilter from 'array-tree-filter';
@@ -13,18 +12,9 @@ export default function useCascader<T>({
1312
value,
1413
onChange,
1514
onClose,
16-
visible,
1715
}: Pick<CascaderProps<T>, 'data' | 'cols' | 'value' | 'onChange' | 'onClose' | 'visible'>) {
1816
const [stateValue, setStateValue] = useSafeState<T[]>([]);
1917

20-
useEffect(() => {
21-
const listener = BackHandler.addEventListener('hardwareBackPress', () => visible);
22-
23-
return () => {
24-
listener.remove();
25-
};
26-
}, []);
27-
2818
useEffect(() => {
2919
const nextValue = generateNextValue(data, value, cols);
3020
setStateValue(nextValue);

packages/react-native-picker/src/picker/components/Normal/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ function NormalPicker<T>(props: NormalPickerProps<T>) {
3030
initialValue,
3131
onChange,
3232
onClose,
33-
visible,
3433
displayType,
3534
});
3635

packages/react-native-picker/src/picker/components/Normal/useNormalPicker.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useEffect } from 'react';
2-
import { BackHandler } from 'react-native';
32

43
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
54

@@ -11,7 +10,6 @@ export default function useNormalPicker<T>({
1110
initialValue,
1211
onChange,
1312
onClose,
14-
visible,
1513
displayType,
1614
}: Omit<NormalPickerProps<T>, 'data'> & { initialValue?: T }) {
1715
const [selectedValue, selectValue] = useSafeState<T | undefined>();
@@ -20,12 +18,6 @@ export default function useNormalPicker<T>({
2018
selectValue(value || initialValue);
2119
}, [value, initialValue]);
2220

23-
/** 绑定物理返回键监听事件,如果当前picker是打开的,返回键作用是关闭picker,否则返回上一个界面 */
24-
useEffect(() => {
25-
const sub = BackHandler.addEventListener('hardwareBackPress', () => visible);
26-
return () => sub.remove();
27-
}, [visible]);
28-
2921
const handleChange = (val: PickerData<T>) => {
3022
if (displayType === 'view') {
3123
onChange?.(val.value);

0 commit comments

Comments
 (0)