From 92f17ebdd217614da960caf12176f855bf0c1e74 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Wed, 8 Nov 2023 20:41:10 -0500 Subject: [PATCH] Add failing test for issue #27670 --- .../__tests__/useSyncExternalStore-test.js | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) 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']); + }); });