Skip to content

Commit 4467b88

Browse files
authored
GestureDetector: more checks for mounted component (#2335)
## Description This builds on top of #2262 - I encountered more cases where a component that was immediately remounting was running into race conditions, so I added checks to every `setImmediate` call.
1 parent 5c7df65 commit 4467b88

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/handlers/gestures/GestureDetector.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ interface AttachHandlersConfig {
130130
gesture: GestureType[];
131131
viewTag: number;
132132
webEventHandlersRef: React.RefObject<WebEventHandler>;
133+
mountedRef: React.RefObject<boolean>;
133134
}
134135

135136
function attachHandlers({
@@ -138,6 +139,7 @@ function attachHandlers({
138139
gesture,
139140
viewTag,
140141
webEventHandlersRef,
142+
mountedRef,
141143
}: AttachHandlersConfig) {
142144
if (!preparedGesture.firstExecution) {
143145
gestureConfig.initialize();
@@ -148,6 +150,9 @@ function attachHandlers({
148150
// use setImmediate to extract handlerTags, because all refs should be initialized
149151
// when it's ran
150152
setImmediate(() => {
153+
if (!mountedRef.current) {
154+
return;
155+
}
151156
gestureConfig.prepare();
152157
});
153158

@@ -165,6 +170,9 @@ function attachHandlers({
165170
// use setImmediate to extract handlerTags, because all refs should be initialized
166171
// when it's ran
167172
setImmediate(() => {
173+
if (!mountedRef.current) {
174+
return;
175+
}
168176
for (const handler of gesture) {
169177
let requireToFail: number[] = [];
170178
if (handler.config.requireToFail) {
@@ -654,6 +662,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
654662
gesture,
655663
viewTag,
656664
webEventHandlersRef,
665+
mountedRef,
657666
});
658667

659668
return () => {
@@ -675,6 +684,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
675684
gesture,
676685
viewTag,
677686
webEventHandlersRef,
687+
mountedRef,
678688
});
679689
} else {
680690
updateHandlers(preparedGesture, gestureConfig, gesture, mountedRef);

0 commit comments

Comments
 (0)