Skip to content

Instantly share code, notes, and snippets.

@frzi
Created February 10, 2026 19:51
Show Gist options
  • Select an option

  • Save frzi/aa7ecd11777516d97f277c324518ea70 to your computer and use it in GitHub Desktop.

Select an option

Save frzi/aa7ecd11777516d97f277c324518ea70 to your computer and use it in GitHub Desktop.
Cookie hook for React/Preact
const cookies: Record<string, CookieListItem> = {}
const onChangeDispatcher = new EventTarget()
const dispatch = (name: string) => onChangeDispatcher.dispatchEvent(new CustomEvent(name))
cookieStore.addEventListener('change', (event) => {
for (const changed of event.changed) {
cookies[changed.name] = changed
dispatch(changed.name)
}
for (const deleted of event.deleted) {
delete cookies[deleted.name]
dispatch(deleted.name)
}
})
export function useCookie(name: string): CookieListItem | undefined {
const forceUpdate = useForceUpdate()
useEffect(() => {
let available = true
cookieStore.get(name).then(cookie => {
if (cookie) {
cookies[cookie.name] = cookie
if (available) {
forceUpdate()
}
}
})
onChangeDispatcher.addEventListener(name, forceUpdate)
return () => {
available = false
onChangeDispatcher.removeEventListener(name, forceUpdate)
}
}, [])
return cookies[name]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment