Skip to content

Instantly share code, notes, and snippets.

@ZacharyBear
Last active May 28, 2025 07:10
Show Gist options
  • Select an option

  • Save ZacharyBear/1c44237db76a7a3c02a6c45608613497 to your computer and use it in GitHub Desktop.

Select an option

Save ZacharyBear/1c44237db76a7a3c02a6c45608613497 to your computer and use it in GitHub Desktop.

Revisions

  1. ZacharyBear revised this gist May 28, 2025. 1 changed file with 0 additions and 2 deletions.
    2 changes: 0 additions & 2 deletions useDark.ts
    Original file line number Diff line number Diff line change
    @@ -15,8 +15,6 @@ const useDark = () => {
    subscribe,
    () => match.matches
    )

    useEffect(() => console.log('dark is', dark), [dark])

    return dark
    }
  2. ZacharyBear created this gist May 28, 2025.
    22 changes: 22 additions & 0 deletions useDark.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    import { useMemo, useSyncExternalStore } from 'React'

    const useDark = () => {
    const match = useMemo(() => window.matchMedia('(prefers-color-scheme: dark)'), [])

    // Handlers
    const subscribe = (cb: () => void) => {
    match.addEventListener('change', cb)

    return () => match.removeEventListener('change', cb)
    }

    // Syncs
    const dark = useSyncExternalStore(
    subscribe,
    () => match.matches
    )

    useEffect(() => console.log('dark is', dark), [dark])

    return dark
    }