Skip to content

Instantly share code, notes, and snippets.

@subtleGradient
Last active February 6, 2020 20:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save subtleGradient/cea26454f8abf18368560332f8db94f9 to your computer and use it in GitHub Desktop.
Save subtleGradient/cea26454f8abf18368560332f8db94f9 to your computer and use it in GitHub Desktop.
useRootLayerDomNode RootLayer
// @flow
import { useLayoutEffect } from 'react';
const mountCountMap = new Map<string, number>();
const updateRootClassNameUsageCount = (className, calculateNewCount: (count: number) => number) => {
const oldCount = mountCountMap.get(className) || 0;
const count = calculateNewCount(oldCount);
mountCountMap.set(className, count);
if (!document.documentElement) return;
if (count === 0) document.documentElement.classList.remove(className);
else if (count > 0) document.documentElement.classList.add(className);
};
export function useRootClassList(className: string, disabled?: boolean = false) {
useLayoutEffect(() => {
if (disabled) {
return;
}
updateRootClassNameUsageCount(className, count => count + 1);
return () => updateRootClassNameUsageCount(className, count => count - 1);
}, [className, disabled]);
}
export function UseRootClassListView({ className, disabled }: { className: string, disabled: boolean }) {
useRootClassList(className, disabled);
return null;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment