Skip to content

Commit 21e1bb2

Browse files
authored
Merge pull request #833 from thundersdata-frontend/rn-issue
fix: 修复几个组件的bug
2 parents 3e77bbb + d6ec3d7 commit 21e1bb2

File tree

4 files changed

+37
-19
lines changed

4 files changed

+37
-19
lines changed

.changeset/dry-falcons-pay.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': patch
3+
---
4+
5+
fix: 修复几个组件的bug

packages/react-native/src/button-group/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { FC } from 'react';
1+
import React, { FC, useEffect } from 'react';
22
import { Keyboard, StyleProp, ViewStyle } from 'react-native';
33

44
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
@@ -36,6 +36,10 @@ const ButtonGroup: FC<ButtonGroupProps> = ({
3636
}) => {
3737
const [active, setActive] = useSafeState(activeIndex);
3838

39+
useEffect(() => {
40+
setActive(activeIndex);
41+
}, [activeIndex]);
42+
3943
if (options.length === 0) return null;
4044

4145
const handlePress = useMemoizedFn(index => {

packages/react-native/src/number-keyboard/useNumberKeyboardModal.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect } from 'react';
1+
import { useEffect, useRef } from 'react';
22

33
import { useBoolean, useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
44

@@ -11,14 +11,21 @@ export default function useNumberKeyboardModal({
1111
onSubmit,
1212
}: Pick<NumberKeyboardModalProps, 'value' | 'onPress' | 'onDelete' | 'onSubmit'>) {
1313
const [text, setText] = useSafeState(value);
14-
const [visible, { setFalse }] = useBoolean(true);
14+
const [visible, visibleAction] = useBoolean(true);
15+
const isFirstPress = useRef(true);
1516

1617
useEffect(() => {
1718
setText(value);
1819
}, [value]);
1920

21+
/** 点击数字,第一次点击的时候,需要把之前的清掉 */
2022
const handleChange = (key: string) => {
21-
setText(text => text + key);
23+
if (isFirstPress.current) {
24+
setText(key);
25+
isFirstPress.current = false;
26+
} else {
27+
setText(text => text + key);
28+
}
2229
onPress?.(key);
2330
};
2431

@@ -29,13 +36,13 @@ export default function useNumberKeyboardModal({
2936

3037
const handleSubmit = () => {
3138
onSubmit?.(text);
32-
setFalse();
39+
visibleAction.setFalse();
3340
};
3441

3542
return {
3643
text,
3744
visible,
38-
setFalse,
45+
setFalse: visibleAction.setFalse,
3946
handleChange: useMemoizedFn(handleChange),
4047
handleSubmit: useMemoizedFn(handleSubmit),
4148
handleDelete: useMemoizedFn(handleDelete),

packages/react-native/src/vehicle-keyboard/useVehicleKeyboardModal.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { useEffect } from 'react';
1+
import { useEffect, useRef } from 'react';
22

3-
import { useBoolean, useLatest, useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
3+
import { useBoolean, useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
44

55
import { VehicleKeyboardModalProps, VehicleKeyboardType } from './type';
66

@@ -10,12 +10,9 @@ export default function useVehicleKeyboardModal({
1010
onDelete,
1111
onSubmit,
1212
}: Pick<VehicleKeyboardModalProps, 'value' | 'onPress' | 'onDelete' | 'onSubmit'>) {
13-
const onPressRef = useLatest(onPress);
14-
const onDeleteRef = useLatest(onDelete);
15-
const onSubmitRef = useLatest(onSubmit);
16-
1713
const [text, setText] = useSafeState(value);
18-
const [visible, { setFalse }] = useBoolean(true);
14+
const [visible, visibleAction] = useBoolean(true);
15+
const isFirstPress = useRef(true);
1916

2017
const type = text.length === 0 ? 'provinces' : ('vehicleNum' as VehicleKeyboardType);
2118
const textArr = text.split('');
@@ -28,26 +25,31 @@ export default function useVehicleKeyboardModal({
2825
if (text.length > 8) {
2926
return;
3027
}
31-
setText(text => text + key);
32-
onPressRef.current?.(key);
28+
if (isFirstPress.current) {
29+
setText(key);
30+
isFirstPress.current = false;
31+
} else {
32+
setText(text => text + key);
33+
}
34+
onPress?.(key);
3335
};
3436

3537
const handleDelete = () => {
3638
setText(text => (text.length > 0 ? text.slice(0, text.length - 1) : ''));
37-
onDeleteRef.current?.();
39+
onDelete?.();
3840
};
3941

4042
const handleSubmit = () => {
41-
onSubmitRef.current?.(text);
42-
setFalse();
43+
onSubmit?.(text);
44+
visibleAction.setFalse();
4345
};
4446

4547
return {
4648
text,
4749
type,
4850
textArr,
4951
visible,
50-
setFalse,
52+
setFalse: visibleAction.setFalse,
5153
handleChange: useMemoizedFn(handleChange),
5254
handleSubmit: useMemoizedFn(handleSubmit),
5355
handleDelete: useMemoizedFn(handleDelete),

0 commit comments

Comments
 (0)