Comments (2)
Step further, I dig out sth intereting.
When I try using Context to feat next-themes manually, both color scheme and background color of Disqus are correct.
You can check this demo.
my code goes here
'use client'
import { useState, useEffect, useContext, createContext } from 'react'
const ThemeContext = createContext()
export const useTheme = () => {
return useContext(ThemeContext)
}
export const ThemeProviders = ({ children }) => {
const [theme, setTheme] = useState('system')
const [colorScheme, setColorScheme] = useState('light')
const toggleTheme = (color) => {
if (color !== 'system' && color !== 'light' && color !== 'dark') {
color = 'system'
}
setTheme(color)
typeof window !== 'undefined' && localStorage.setItem('user-color-scheme', color)
}
useEffect(() => {
let localTheme = localStorage.getItem('user-color-scheme')
if (localTheme && localTheme !== 'system') {
setTheme(localTheme)
}
const handleColorSchemeChange = (event) => {
if (!event) {
event = window.matchMedia("(prefers-color-scheme: dark)")
}
if (event.matches) {
setColorScheme("dark")
} else {
setColorScheme("light")
}
}
handleColorSchemeChange()
window.matchMedia("(prefers-color-scheme: dark)").addListener(handleColorSchemeChange)
return () => {
window.matchMedia("(prefers-color-scheme: dark)").removeListener(handleColorSchemeChange)
}
}, [])
useEffect(() => {
document.documentElement.classList.add(theme === 'system' ? colorScheme : theme)
return () => {
document.documentElement.classList.remove(theme === 'system' ? colorScheme : theme)
}
}, [theme, colorScheme])
return (
<ThemeContext.Provider value={{ theme, toggleTheme }}>
<script dangerouslySetInnerHTML={{__html: `document.documentElement.classList.add((typeof localStorage.getItem('user-color-scheme') === 'undefined' || localStorage.getItem('user-color-scheme') === 'system') ? (window.matchMedia("(prefers-color-scheme: dark)").matches ? 'dark' : 'light') : (localStorage.getItem('user-color-scheme') === 'dark' ? 'dark' : 'light'))`}} />
{children}
</ThemeContext.Provider>
)
}
export const ToggleTheme = ({ responsive }) => {
const [mounted, setMounted] = useState(false)
const { theme, toggleTheme } = useTheme()
useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return null
}
return (
...
from next-themes.
Not a issue related to the library but rather faulty usage.
from next-themes.
Related Issues (20)
- How to disable syncing themes between tabs HOT 2
- Documentation out of date with Tailwind's new dark-mode API
- Should `resolvedTheme` obey `forcedTheme`? HOT 3
- Allow nested providers HOT 2
- Theme object is injected into the "data-theme" property. HOT 1
- useTheme doesn't work in monorepo ui library. HOT 1
- `TypeError: Cannot read properties of undefined (reading 'addListener')` using `vitest`/`@testing-library/react` HOT 1
- Support for changing both class and data-theme attribute simultaneously HOT 1
- Callback Version of `setTheme` Passes Itself HOT 1
- Possibility to share across sub-domains? HOT 1
- ThemeProvider returns multiple types HOT 3
- setTheme not working HOT 1
- Theme flashing v0.3.0 HOT 7
- Next.js suspense triggered twice with next-themes HOT 1
- Flash Of Unstyled Content (FOUC) on Live Website HOT 6
- The way avoid hydration errors has a negative impact on SEO. HOT 2
- [Feature request]:setTheme multiple classes for next-themes HOT 5
- [Feature request]: The opportunity not to store theme value in LS
- [Feature request]: react 19 support HOT 2
- [Bug]: NextJs dark mode background is black on overscroll
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from next-themes.