Skip to content

Commit bdd7cdf

Browse files
SutuSebastianSebastian Sutu
andauthored
fix(component): fix <DarkThemeToggle> console warning (#1172)
Co-authored-by: Sebastian Sutu <[email protected]>
1 parent 479eca1 commit bdd7cdf

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/components/DarkThemeToggle/DarkThemeToggle.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { ComponentProps, FC } from 'react';
44
import type { IconBaseProps } from 'react-icons';
55
import { HiMoon, HiSun } from 'react-icons/hi';
66
import { twMerge } from 'tailwind-merge';
7+
import { useIsMounted } from '~/src/hooks/use-is-mounted';
78
import { mergeDeep } from '../../helpers/merge-deep';
89
import { useThemeMode } from '../../hooks/use-theme-mode';
910
import { getTheme } from '../../theme-store';
@@ -31,6 +32,7 @@ export const DarkThemeToggle: FC<DarkThemeToggleProps> = ({
3132
iconLight: IconLight = HiMoon,
3233
...props
3334
}) => {
35+
const isMounted = useIsMounted();
3436
const { computedMode, toggleMode } = useThemeMode();
3537

3638
const theme = mergeDeep(getTheme().darkThemeToggle, customTheme);
@@ -46,12 +48,12 @@ export const DarkThemeToggle: FC<DarkThemeToggleProps> = ({
4648
>
4749
<IconDark
4850
aria-label="Currently dark mode"
49-
data-active={computedMode === 'dark'}
51+
data-active={isMounted && computedMode === 'dark'}
5052
className={twMerge(theme.root.icon, 'hidden dark:block')}
5153
/>
5254
<IconLight
5355
aria-label="Currently light mode"
54-
data-active={computedMode === 'light'}
56+
data-active={isMounted && computedMode === 'light'}
5557
className={twMerge(theme.root.icon, 'dark:hidden')}
5658
/>
5759
</button>

src/hooks/use-is-mounted.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
'use client';
2+
3+
import { useEffect, useState } from 'react';
4+
5+
export function useIsMounted() {
6+
const [mounted, setMounted] = useState(false);
7+
8+
useEffect(() => setMounted(true), []);
9+
10+
return mounted;
11+
}

0 commit comments

Comments
 (0)