From 31ccd9fe91aa69e6dc8f6cd9e679a3c9090e00cb Mon Sep 17 00:00:00 2001 From: Armano Date: Fri, 19 Mar 2021 18:57:24 +0100 Subject: [PATCH] perf(v2): reduce amount of navbar renders while scrolling --- .../src/theme/DocSidebar/index.tsx | 7 +++++-- .../src/theme/hooks/useHideableNavbar.ts | 12 ++---------- .../src/theme/hooks/useScrollPosition.ts | 17 ++++++++--------- .../docusaurus-theme-classic/src/types.d.ts | 4 ++-- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx index 8a310d2e17a2..2aa256ae2dbd 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocSidebar/index.tsx @@ -190,12 +190,15 @@ function DocSidebar({ isHidden, }: Props): JSX.Element | null { const [showResponsiveSidebar, setShowResponsiveSidebar] = useState(false); + const [showAnnouncementBar, setShowAnnouncementBar] = useState(true); const { navbar: {hideOnScroll}, hideableSidebar, } = useThemeConfig(); const {isAnnouncementBarClosed} = useUserPreferencesContext(); - const {scrollY} = useScrollPosition(); + useScrollPosition(({scrollY}) => { + setShowAnnouncementBar(scrollY === 0); + }); useLockBodyScroll(showResponsiveSidebar); const windowSize = useWindowSize(); @@ -222,7 +225,7 @@ function DocSidebar({ { 'menu--show': showResponsiveSidebar, [styles.menuWithAnnouncementBar]: - !isAnnouncementBarClosed && scrollY === 0, + !isAnnouncementBarClosed && showAnnouncementBar, }, )}>