@@ -1272,54 +1272,64 @@ describe('useEffectEvent', () => {
12721272 } ) ;
12731273
12741274 // @gate enableActivity
1275- it ( 'effect events are fresh in deeply nested hidden Activities ' , async ( ) => {
1275+ it ( 'effect events are fresh inside Activity ' , async ( ) => {
12761276 function Child ( { value} ) {
1277- const logValue = useEffectEvent ( ( ) => {
1278- Scheduler . log ( 'effect event: ' + value ) ;
1277+ const getValue = useEffectEvent ( effectName => {
1278+ return value ;
12791279 } ) ;
12801280 useInsertionEffect ( ( ) => {
1281- logValue ( ) ;
1281+ Scheduler . log ( 'insertion create: ' + getValue ( ) ) ;
12821282 return ( ) => {
1283- logValue ( ) ;
1283+ Scheduler . log ( 'insertion destroy: ' + getValue ( ) ) ;
12841284 } ;
12851285 } ) ;
1286+ useLayoutEffect ( ( ) => {
1287+ Scheduler . log ( 'layout create: ' + getValue ( ) ) ;
1288+ return ( ) => {
1289+ Scheduler . log ( 'layout destroy: ' + getValue ( ) ) ;
1290+ } ;
1291+ } ) ;
1292+
12861293 Scheduler . log ( 'render: ' + value ) ;
12871294 return null ;
12881295 }
12891296
1290- function App ( { value} ) {
1297+ function App ( { value, mode } ) {
12911298 return (
1292- < React . Activity mode = "hidden" >
1293- < React . Activity mode = "hidden" >
1294- < React . Activity mode = "hidden" >
1295- < Child value = { value } />
1296- </ React . Activity >
1297- </ React . Activity >
1299+ < React . Activity mode = { mode } >
1300+ < Child value = { value } />
12981301 </ React . Activity >
12991302 ) ;
13001303 }
13011304
13021305 const root = ReactNoop . createRoot ( ) ;
13031306
1304- // Initial mount with value=1
1305- await act ( ( ) => root . render ( < App value = { 1 } /> ) ) ;
1307+ // Mount hidden
1308+ await act ( async ( ) => root . render ( < App value = { 1 } mode = "hidden" /> ) ) ;
1309+ assertLog ( [ 'render: 1' , 'insertion create: 1' ] ) ;
1310+
1311+ // Update, still hidden
1312+ await act ( async ( ) => root . render ( < App value = { 2 } mode = "hidden" /> ) ) ;
1313+
1314+ // Bug in enableViewTransition. Insertion and layout see stale closure.
13061315 assertLog ( [
1307- 'render: 1' ,
1308- 'effect event: 1' , // Insertion effect mount should see fresh value
1316+ 'render: 2' ,
1317+ ...( gate ( 'enableViewTransition' ) &&
1318+ ! gate ( 'enableEffectEventMutationPhase' )
1319+ ? [ 'insertion destroy: 1' , 'insertion create: 1' ]
1320+ : [ 'insertion destroy: 2' , 'insertion create: 2' ] ) ,
13091321 ] ) ;
13101322
1311- // Update to value=2
1312- await act ( ( ) => root . render ( < App value = { 2 } /> ) ) ;
1323+ // Switch to visible
1324+ await act ( async ( ) => root . render ( < App value = { 2 } mode = "visible" /> ) ) ;
13131325
1314- // Bug in enableViewTransition.
1326+ // Bug in enableViewTransition. Even when switching to visible, sees stale closure.
13151327 assertLog ( [
13161328 'render: 2' ,
1317- gate ( 'enableViewTransition' ) && ! gate ( 'enableEffectEventMutationPhase' )
1318- ? 'effect event: 1'
1319- : 'effect event: 2' ,
1320- gate ( 'enableViewTransition' ) && ! gate ( 'enableEffectEventMutationPhase' )
1321- ? 'effect event: 1'
1322- : 'effect event: 2' ,
1329+ ...( gate ( 'enableViewTransition' ) &&
1330+ ! gate ( 'enableEffectEventMutationPhase' )
1331+ ? [ 'insertion destroy: 1' , 'insertion create: 1' , 'layout create: 1' ]
1332+ : [ 'insertion destroy: 2' , 'insertion create: 2' , 'layout create: 2' ] ) ,
13231333 ] ) ;
13241334 } ) ;
13251335} ) ;
0 commit comments