@@ -10,35 +10,22 @@ const DarkModeToggle = () => {
1010
1111 useEffect ( ( ) => {
1212 const theme = localStorage . getItem ( 'theme' ) ;
13- const prefersDark = window . matchMedia (
14- '(prefers-color-scheme: dark)' ,
15- ) . matches ;
16-
17- setIsDarkMode ( ( ) => {
18- const next = theme === 'dark' || ( ! theme && prefersDark ) ;
19-
20- if ( next ) {
21- document . documentElement . classList . add ( 'dark' ) ;
22- } else {
23- document . documentElement . classList . remove ( 'dark' ) ;
24- }
25-
26- return next ;
27- } ) ;
28-
29- const mediaQuery = window . matchMedia ( '(prefers-color-scheme: dark)' ) ;
30- const handleThemeChange = ( e : MediaQueryListEvent ) => {
31- if ( ! localStorage . getItem ( 'theme' ) ) {
32- setIsDarkMode ( ( ) => {
33- const next = e . matches ;
34- document . documentElement . classList . toggle ( 'dark' , next ) ;
35- return next ;
36- } ) ;
37- }
38- } ;
39-
40- mediaQuery . addEventListener ( 'change' , handleThemeChange ) ;
41- return ( ) => mediaQuery . removeEventListener ( 'change' , handleThemeChange ) ;
13+ const prefersDark = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
14+
15+ // ✅ Determine the final theme first
16+ let shouldBeDark =
17+ theme === 'dark' || ( ! theme && prefersDark ) ;
18+
19+ // ✅ Apply class WITHOUT calling setState inside effect yet
20+ if ( shouldBeDark ) {
21+ document . documentElement . classList . add ( 'dark' ) ;
22+ } else {
23+ document . documentElement . classList . remove ( 'dark' ) ;
24+ }
25+
26+ // ✅ Update state ONCE at the end
27+ setIsDarkMode ( shouldBeDark ) ;
28+
4229 } , [ ] ) ;
4330
4431 const toggleDarkMode = ( ) => {
0 commit comments