mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Add failing test for issue #27670
This commit is contained in:
@@ -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 (
|
||||
<React.unstable_Activity mode={mode}>
|
||||
<Wrapper revision={revision}>
|
||||
<Subscriber />
|
||||
</Wrapper>
|
||||
</React.unstable_Activity>
|
||||
);
|
||||
}
|
||||
|
||||
function Wrapper({children, revision}) {
|
||||
useLayoutEffect(() => {
|
||||
store.set('revision:' + revision);
|
||||
}, [revision]);
|
||||
|
||||
return children;
|
||||
}
|
||||
|
||||
function Subscriber() {
|
||||
const revision = useSyncExternalStore(store.subscribe, store.getState);
|
||||
return <Text text={revision} />;
|
||||
}
|
||||
|
||||
const root = ReactNoop.createRoot();
|
||||
|
||||
// Mount app
|
||||
await act(() => {
|
||||
root.render(<App mode="visible" revision="1" />);
|
||||
});
|
||||
assertLog(['revision:1']);
|
||||
|
||||
// Hide subtree
|
||||
await act(() => {
|
||||
root.render(<App mode="hidden" revision="1" />);
|
||||
});
|
||||
assertLog(['revision:1']);
|
||||
|
||||
// Show subtree (and update mutable store in a layout effect)
|
||||
await act(() => {
|
||||
root.render(<App mode="visible" revision="2" />);
|
||||
});
|
||||
assertLog(['revision:1', 'revision:2']);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user