Skip to content

Commit e3b0793

Browse files
authored
fix(react): resolve theme toggle hydration mismatch (#1103)
* feat: resolve theme toggle hydration mismatch * fix(react): validate stored theme preference on mount * refactor: remove redundant key from ThemeToggle
1 parent 0321911 commit e3b0793

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

‎packages/react/src/html/ui/hooks/useTheme.mjs‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,14 @@ const applySystemTheme = () => applyTheme('system');
2929
* @returns {['system'|'light'|'dark', (next: 'system'|'light'|'dark') => void]}
3030
*/
3131
export const useTheme = () => {
32-
// Read stored preference once on mount; default to 'system'.
33-
const [pref, setPref] = useState(() =>
34-
server ? 'system' : (localStorage.getItem('theme') ?? 'system')
35-
);
32+
const [pref, setPref] = useState('system');
33+
34+
useEffect(() => {
35+
const stored = localStorage.getItem('theme');
36+
if (stored === 'light' || stored === 'dark') {
37+
setPref(stored);
38+
}
39+
}, []);
3640

3741
// Apply theme on every preference change, and if 'system',
3842
// also listen for OS-level color scheme changes.

0 commit comments

Comments
 (0)