@itwin/itwinui-react
Version:
A react component library for iTwinUI
33 lines (32 loc) • 849 B
JavaScript
import * as React from 'react';
let _React = React;
export const useSyncExternalStore =
_React.useSyncExternalStore || useSyncExternalStoreShim;
function useSyncExternalStoreShim(subscribe, getSnapshot) {
let value = getSnapshot();
let [{ instance }, forceUpdate] = React.useState({
instance: {
value,
getSnapshot,
},
});
React.useLayoutEffect(() => {
instance.value = value;
instance.getSnapshot = getSnapshot;
if (!Object.is(value, getSnapshot()))
forceUpdate({
instance,
});
}, [subscribe, value, getSnapshot]);
React.useEffect(() => {
let synchronize = () => {
if (!Object.is(instance.value, instance.getSnapshot()))
forceUpdate({
instance,
});
};
synchronize();
return subscribe(synchronize);
}, [subscribe]);
return value;
}