diff --git a/packages/react-reconciler/src/__tests__/useSyncExternalStore-test.js b/packages/react-reconciler/src/__tests__/useSyncExternalStore-test.js index 67cefa180a..c27297c120 100644 --- a/packages/react-reconciler/src/__tests__/useSyncExternalStore-test.js +++ b/packages/react-reconciler/src/__tests__/useSyncExternalStore-test.js @@ -294,4 +294,51 @@ describe('useSyncExternalStore', () => { ); }, ); + + test('detecting mutation in previously hidden activity subtree', async () => { + const store = createExternalStore('revision:1'); + + function App({mode, revision}) { + return ( + + + + + + ); + } + + function Wrapper({children, revision}) { + useLayoutEffect(() => { + store.set('revision:' + revision); + }, [revision]); + + return children; + } + + function Subscriber() { + const revision = useSyncExternalStore(store.subscribe, store.getState); + return ; + } + + const root = ReactNoop.createRoot(); + + // Mount app + await act(() => { + root.render(); + }); + assertLog(['revision:1']); + + // Hide subtree + await act(() => { + root.render(); + }); + assertLog(['revision:1']); + + // Show subtree (and update mutable store in a layout effect) + await act(() => { + root.render(); + }); + assertLog(['revision:1', 'revision:2']); + }); });