Skip to content

Commit a5b137f

Browse files
committed
Avoid allocations
1 parent 9d256ae commit a5b137f

3 files changed

Lines changed: 54 additions & 44 deletions

File tree

packages/react-native-gesture-handler/src/v3/hooks/utils/configUtils.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,8 @@ export function prepareConfigForNativeSide<
8787
for (const [key, value] of Object.entries(config)) {
8888
// @ts-ignore That's the point, we want to see if key exists in the whitelists
8989
if (allowedNativeProps.has(key) || handlerPropsWhiteList.has(key)) {
90-
Object.assign(filteredConfig, {
91-
[key]: Reanimated?.isSharedValue(value) ? value.value : value,
92-
});
90+
(filteredConfig as Record<string, unknown>)[key] =
91+
Reanimated?.isSharedValue(value) ? value.value : value;
9392
} else if (PropsToFilter.has(key)) {
9493
continue;
9594
} else {

packages/react-native-gesture-handler/src/v3/hooks/utils/eventHandlersUtils.ts

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,49 @@ export function useMemoizedGestureCallbacks<
1616
>(
1717
callbacks: GestureCallbacks<THandlerData, TExtendedHandlerData>
1818
): GestureCallbacks<THandlerData, TExtendedHandlerData> {
19-
return useMemo(
20-
() => ({
21-
...(callbacks.onBegin ? { onBegin: callbacks.onBegin } : {}),
22-
...(callbacks.onActivate ? { onActivate: callbacks.onActivate } : {}),
23-
...(callbacks.onDeactivate
24-
? { onDeactivate: callbacks.onDeactivate }
25-
: {}),
26-
...(callbacks.onFinalize ? { onFinalize: callbacks.onFinalize } : {}),
27-
...(callbacks.onUpdate ? { onUpdate: callbacks.onUpdate } : {}),
28-
...(callbacks.onTouchesDown
29-
? { onTouchesDown: callbacks.onTouchesDown }
30-
: {}),
31-
...(callbacks.onTouchesMove
32-
? { onTouchesMove: callbacks.onTouchesMove }
33-
: {}),
34-
...(callbacks.onTouchesUp ? { onTouchesUp: callbacks.onTouchesUp } : {}),
35-
...(callbacks.onTouchesCancel
36-
? { onTouchesCancel: callbacks.onTouchesCancel }
37-
: {}),
38-
}),
39-
[
40-
callbacks.onActivate,
41-
callbacks.onBegin,
42-
callbacks.onDeactivate,
43-
callbacks.onFinalize,
44-
callbacks.onTouchesCancel,
45-
callbacks.onTouchesDown,
46-
callbacks.onTouchesMove,
47-
callbacks.onTouchesUp,
48-
callbacks.onUpdate,
49-
]
50-
);
19+
return useMemo(() => {
20+
const memoized: GestureCallbacks<THandlerData, TExtendedHandlerData> = {};
21+
22+
if (callbacks.onBegin) {
23+
memoized.onBegin = callbacks.onBegin;
24+
}
25+
if (callbacks.onActivate) {
26+
memoized.onActivate = callbacks.onActivate;
27+
}
28+
if (callbacks.onDeactivate) {
29+
memoized.onDeactivate = callbacks.onDeactivate;
30+
}
31+
if (callbacks.onFinalize) {
32+
memoized.onFinalize = callbacks.onFinalize;
33+
}
34+
if (callbacks.onUpdate) {
35+
memoized.onUpdate = callbacks.onUpdate;
36+
}
37+
if (callbacks.onTouchesDown) {
38+
memoized.onTouchesDown = callbacks.onTouchesDown;
39+
}
40+
if (callbacks.onTouchesMove) {
41+
memoized.onTouchesMove = callbacks.onTouchesMove;
42+
}
43+
if (callbacks.onTouchesUp) {
44+
memoized.onTouchesUp = callbacks.onTouchesUp;
45+
}
46+
if (callbacks.onTouchesCancel) {
47+
memoized.onTouchesCancel = callbacks.onTouchesCancel;
48+
}
49+
50+
return memoized;
51+
}, [
52+
callbacks.onActivate,
53+
callbacks.onBegin,
54+
callbacks.onDeactivate,
55+
callbacks.onFinalize,
56+
callbacks.onTouchesCancel,
57+
callbacks.onTouchesDown,
58+
callbacks.onTouchesMove,
59+
callbacks.onTouchesUp,
60+
callbacks.onUpdate,
61+
]);
5162
}
5263

5364
function getHandler<THandlerData, TExtendedHandlerData extends THandlerData>(

packages/react-native-gesture-handler/src/v3/hooks/utils/reanimatedUtils.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Reanimated } from '../../../handlers/gestures/reanimatedWrapper';
22
import { NativeProxy } from '../../NativeProxy';
33
import type {
44
BaseGestureConfig,
5-
GestureCallbacks,
65
SharedValue,
76
SharedValueOrT,
87
} from '../../types';
@@ -101,14 +100,15 @@ export function hasWorkletEventHandlers<
101100
THandlerData,
102101
TExtendedHandlerData extends THandlerData,
103102
>(config: BaseGestureConfig<TConfig, THandlerData, TExtendedHandlerData>) {
104-
return Object.entries(config).some(
105-
([key, value]) =>
106-
HandlerCallbacks.has(
107-
key as keyof GestureCallbacks<THandlerData, TExtendedHandlerData>
108-
) &&
109-
typeof value === 'function' &&
110-
'__workletHash' in value
111-
);
103+
for (const key of HandlerCallbacks) {
104+
const value = config[key];
105+
106+
if (typeof value === 'function' && '__workletHash' in value) {
107+
return true;
108+
}
109+
}
110+
111+
return false;
112112
}
113113

114114
export function maybeUnpackValue<T>(

0 commit comments

Comments
 (0)