Skip to content

Commit 924d1d8

Browse files
authored
Merge pull request #2253 from didi/perf-picker-view
perf: use `contentOffset` instead of `onContentSizeChange` in PikcerView
2 parents 8a09eb0 + 4aaa607 commit 924d1d8

2 files changed

Lines changed: 8 additions & 14 deletions

File tree

  • packages/webpack-plugin/lib/runtime/components/react

packages/webpack-plugin/lib/runtime/components/react/mpx-picker-view-column/index.tsx

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ const _PickerViewColumn = forwardRef<HandlerRef<ScrollView & View, ColumnProps>,
9898
return [{ paddingVertical: paddingHeight }]
9999
}, [paddingHeight])
100100

101+
const initialContentOffsetY = useMemo(
102+
() => initialIndex * itemRawH,
103+
[initialIndex, itemRawH]
104+
)
105+
101106
const getIndex = useCallback((y: number) => {
102107
const calc = Math.round(y / itemRawH)
103108
return Math.max(0, Math.min(calc, maxIndex))
@@ -155,17 +160,6 @@ const _PickerViewColumn = forwardRef<HandlerRef<ScrollView & View, ColumnProps>,
155160
}, isIOS ? 0 : 200)
156161
}, [itemRawH, maxIndex, initialIndex])
157162

158-
const onContentSizeChange = useCallback((_w: number, h: number) => {
159-
const y = initialIndex * itemRawH
160-
if (y <= h) {
161-
clearTimerScrollTo()
162-
timerScrollTo.current = setTimeout(() => {
163-
scrollViewRef.current?.scrollTo({ x: 0, y, animated: false })
164-
activeIndex.current = initialIndex
165-
}, 0)
166-
}
167-
}, [itemRawH, initialIndex])
168-
169163
const onItemLayout = useCallback((e: LayoutChangeEvent) => {
170164
const { height: rawH } = e.nativeEvent.layout
171165
const roundedH = Math.round(rawH)
@@ -331,8 +325,8 @@ const _PickerViewColumn = forwardRef<HandlerRef<ScrollView & View, ColumnProps>,
331325
onScrollEndDrag,
332326
onMomentumScrollBegin,
333327
onMomentumScrollEnd,
334-
onContentSizeChange,
335-
contentContainerStyle
328+
contentContainerStyle,
329+
contentOffset: { x: 0, y: initialContentOffsetY }
336330
}) as React.ComponentProps<typeof Reanimated.ScrollView>
337331

338332
return createElement(

packages/webpack-plugin/lib/runtime/components/react/mpx-picker-view/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ const _PickerView = forwardRef<HandlerRef<View, PickerViewProps>, PickerViewProp
170170
columnData,
171171
ref: cloneRef,
172172
columnIndex: index,
173-
key: `pick-view-${index}`,
173+
key: `pick-view-${index}-${columnData.length}`,
174174
wrapperStyle: {
175175
height: normalStyle?.height || DefaultPickerItemH,
176176
itemHeight: indicatorH || DefaultPickerItemH

0 commit comments

Comments
 (0)