Skip to content

Commit ea4ef3b

Browse files
committed
fix: 优化代码,删除一些无用的useEffect赋值
1 parent efa0b22 commit ea4ef3b

File tree

8 files changed

+29
-79
lines changed

8 files changed

+29
-79
lines changed

.changeset/chatty-cats-shave.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+
优化代码,删除一些无用的useEffect赋值

packages/react-native-picker/src/date-period-input/useDatePeriodInput.tsx

Lines changed: 17 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect } from 'react';
1+
import React from 'react';
22
import { Keyboard } from 'react-native';
33

44
import { Modal } from '@td-design/react-native';
@@ -15,45 +15,34 @@ export default function useDatePeriodInput({
1515
format,
1616
...restProps
1717
}: ImperativeModalChildrenProps<Pick<DatePeriodInputProps, 'value' | 'onChange' | 'format'>>) {
18-
const [currentIndex, setCurrentIndex] = useSafeState(0);
19-
const [dates, setDates] = useSafeState<[Date | undefined, Date | undefined]>(value ?? [undefined, undefined]);
20-
const [minDate, setMinDate] = useSafeState<string | undefined>(undefined); // 对结束时间来说,它的最小值就是开始时间的值
21-
const [maxDate, setMaxDate] = useSafeState<string | undefined>(undefined); // 对开始时间来说,它的最大值就是结束时间的值
18+
const [dates, setDates] = useSafeState(value ?? [undefined, undefined]);
2219

23-
useEffect(() => {
24-
value && setDates(value);
25-
}, [value]);
26-
27-
const handleChange = (date?: Date) => {
20+
const handleChange = useMemoizedFn((date: Date | undefined, index: number) => {
2821
const [startDate, endDate] = dates;
2922
if (onChange) {
30-
onChange(currentIndex === 0 ? [date!, endDate] : [startDate, date!]);
23+
onChange(index === 0 ? [date!, endDate] : [startDate, date!]);
3124
} else {
32-
setDates(draft => {
33-
draft[currentIndex] = date;
34-
return draft;
25+
setDates((draft: any[]) => {
26+
const nextDates = [...draft];
27+
nextDates[index] = date;
28+
return nextDates;
3529
});
3630
}
37-
};
31+
});
3832

3933
/** 点开开始时间选择器 */
4034
const handleStartPress = () => {
4135
Keyboard.dismiss();
42-
setCurrentIndex(0);
43-
if (dates[1]) {
44-
setMinDate(undefined);
45-
setMaxDate(dayjs(dates[1]).format(format));
46-
}
4736
Modal.show(
4837
<DatePicker
4938
{...restProps}
5039
{...{
5140
format,
52-
onChange: handleChange,
53-
minDate,
54-
maxDate,
55-
value: dates[currentIndex],
41+
onChange: date => handleChange(date, 0),
42+
value: dates[0],
5643
}}
44+
minDate={undefined}
45+
maxDate={dates[1] ? dayjs(dates[1]).format(format) : undefined}
5746
/>,
5847
{
5948
position: 'bottom',
@@ -64,21 +53,16 @@ export default function useDatePeriodInput({
6453
/** 点开结束时间选择器 */
6554
const handleEndPress = () => {
6655
Keyboard.dismiss();
67-
setCurrentIndex(1);
68-
if (dates[0]) {
69-
setMinDate(dayjs(dates[0]).format(format));
70-
setMaxDate(undefined);
71-
}
7256
Modal.show(
7357
<DatePicker
7458
{...restProps}
7559
{...{
7660
format,
77-
onChange: handleChange,
78-
minDate,
79-
maxDate,
80-
value: dates[currentIndex],
61+
onChange: date => handleChange(date, 1),
62+
value: dates[1],
8163
}}
64+
minDate={dates[0] ? dayjs(dates[0]).format(format) : undefined}
65+
maxDate={undefined}
8266
/>,
8367
{
8468
position: 'bottom',
@@ -99,12 +83,6 @@ export default function useDatePeriodInput({
9983
} else {
10084
setDates(draft => [undefined, draft[1]]);
10185
}
102-
setMinDate(undefined);
103-
if (endDate) {
104-
setMaxDate(dayjs(endDate).format(format));
105-
} else {
106-
setMaxDate(undefined);
107-
}
10886
};
10987

11088
/** 清除结束时间 */
@@ -115,22 +93,12 @@ export default function useDatePeriodInput({
11593
} else {
11694
setDates(draft => [draft[0], undefined]);
11795
}
118-
setMaxDate(undefined);
119-
if (startDate) {
120-
setMinDate(dayjs(startDate).format(format));
121-
} else {
122-
setMinDate(undefined);
123-
}
12496
};
12597

12698
return {
127-
currentIndex,
12899
dates,
129-
minDate,
130-
maxDate,
131100
handleStartPress: useMemoizedFn(handleStartPress),
132101
handleEndPress: useMemoizedFn(handleEndPress),
133-
handleChange: useMemoizedFn(handleChange),
134102
clearStartDate: useMemoizedFn(clearStartDate),
135103
clearEndDate: useMemoizedFn(clearEndDate),
136104
};

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { useEffect } from 'react';
2-
31
import { ImperativeModalChildrenProps } from '@td-design/react-native/lib/typescript/modal/type';
42
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
53
import dayjs from 'dayjs';
@@ -14,10 +12,6 @@ export default function useDatePicker({
1412
}: ImperativeModalChildrenProps<DatePickerPropsBase & ModalPickerProps>) {
1513
const [date, setDate] = useSafeState<Date | undefined>(value);
1614

17-
useEffect(() => {
18-
setDate(value);
19-
}, [value]);
20-
2115
const handleChange = (date?: Date) => {
2216
setDate(date);
2317
};

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

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

33
import { ImperativeModalChildrenProps } from '@td-design/react-native/lib/typescript/modal/type';
44
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
@@ -14,12 +14,7 @@ export default function useCascader<T>({
1414
onChange,
1515
closeModal,
1616
}: ImperativeModalChildrenProps<Pick<CascaderProps<T>, 'data' | 'cols' | 'value' | 'onChange'>>) {
17-
const [stateValue, setStateValue] = useSafeState<T[]>([]);
18-
19-
useEffect(() => {
20-
const nextValue = generateNextValue(data, value, cols);
21-
setStateValue(nextValue);
22-
}, [data, value, cols]);
17+
const [stateValue, setStateValue] = useSafeState<T[]>(generateNextValue(data, value, cols));
2318

2419
const handleValueChange = (value: PickerData<T>, index: number) => {
2520
const newValue = [...stateValue];

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ function NormalPicker<T>(props: ImperativeModalChildrenProps<NormalPickerProps<T
2222
...restProps
2323
} = props;
2424

25+
console.log(value, 'value');
26+
2527
const initialValue = data.length > 0 ? data[0].value : undefined;
2628

2729
const { selectedValue, handleOk, handleChange, handleClose } = useNormalPicker({

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { useEffect } from 'react';
2-
31
import { ImperativeModalChildrenProps } from '@td-design/react-native/lib/typescript/modal/type';
42
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
53

@@ -12,11 +10,7 @@ export default function useNormalPicker<T>({
1210
onChange,
1311
closeModal,
1412
}: ImperativeModalChildrenProps<Omit<NormalPickerProps<T>, 'data'> & { initialValue?: T }>) {
15-
const [selectedValue, selectValue] = useSafeState<T | undefined>();
16-
17-
useEffect(() => {
18-
selectValue(value || initialValue);
19-
}, [value, initialValue]);
13+
const [selectedValue, selectValue] = useSafeState<T | undefined>(value || initialValue);
2014

2115
const handleChange = (val: PickerData<T>) => {
2216
selectValue(val.value);

packages/react-native-picker/src/useDatePicker.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { ForwardedRef, useEffect, useImperativeHandle } from 'react';
1+
import React, { ForwardedRef, useImperativeHandle } from 'react';
22
import { Keyboard } from 'react-native';
33

44
import { Modal } from '@td-design/react-native';
@@ -44,10 +44,6 @@ export default function useDatePicker({
4444
};
4545
});
4646

47-
useEffect(() => {
48-
setDate(value);
49-
}, [value]);
50-
5147
const handlePress = () => {
5248
Keyboard.dismiss();
5349
Modal.show(<DatePicker {...restProps} {...{ value: date, format, onChange: handleChange }} />, {

packages/react-native-picker/src/usePicker.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { ForwardedRef, useEffect, useImperativeHandle } from 'react';
1+
import React, { ForwardedRef, useImperativeHandle } from 'react';
22
import { Keyboard } from 'react-native';
33

44
import { Modal } from '@td-design/react-native';
@@ -51,10 +51,6 @@ export default function usePicker<T>({
5151
};
5252
});
5353

54-
useEffect(() => {
55-
setState(value);
56-
}, [value]);
57-
5854
const handlePress = () => {
5955
Keyboard.dismiss();
6056
Modal.show(<Picker {...restProps} {...{ cascade, value: state as any, data, onChange: handleChange }} />, {

0 commit comments

Comments
 (0)