@@ -364,10 +364,17 @@ function handleTopLevelType(
364
364
if ( state === null && responder . createInitialState !== undefined ) {
365
365
state = fiber . stateNode . state = responder . createInitialState ( props ) ;
366
366
}
367
+ const previousFiber = currentFiber ;
368
+ const previousResponder = currentResponder ;
367
369
currentFiber = fiber ;
368
370
currentResponder = responder ;
369
371
370
- responder . onEvent ( responderEvent , eventResponderContext , props , state ) ;
372
+ try {
373
+ responder . onEvent ( responderEvent , eventResponderContext , props , state ) ;
374
+ } finally {
375
+ currentFiber = previousFiber ;
376
+ currentResponder = previousResponder ;
377
+ }
371
378
}
372
379
373
380
export function runResponderEventsInBatch (
@@ -413,3 +420,30 @@ export function runResponderEventsInBatch(
413
420
processEventQueue ( ) ;
414
421
}
415
422
}
423
+
424
+ export function unmountEventResponder (
425
+ responder : ReactEventResponder ,
426
+ fiber : Fiber ,
427
+ ) : void {
428
+ const onUnmount = responder . onUnmount ;
429
+ if ( onUnmount !== undefined ) {
430
+ let { props , state } = fiber . stateNode ;
431
+ const previousEventQueue = currentEventQueue ;
432
+ const previousFiber = currentFiber ;
433
+ const previousResponder = currentResponder ;
434
+ currentEventQueue = createEventQueue ( ) ;
435
+ currentFiber = fiber ;
436
+ currentResponder = responder ;
437
+ try {
438
+ onUnmount ( eventResponderContext , props , state ) ;
439
+ } finally {
440
+ currentEventQueue = previousEventQueue ;
441
+ currentFiber = previousFiber ;
442
+ currentResponder = previousResponder ;
443
+ }
444
+ }
445
+ if ( currentOwner === fiber ) {
446
+ // TODO fire owner changed callback
447
+ currentOwner = null ;
448
+ }
449
+ }
0 commit comments