Skip to content

Instantly share code, notes, and snippets.

View dani-z's full-sized avatar
:octocat:

Daniel Zaremba dani-z

:octocat:
View GitHub Profile
@dani-z
dani-z / createCtx-noNullCheck.tsx
Created December 29, 2022 22:56 — forked from swyxio/createCtx-noNullCheck.tsx
better createContext APIs with setters, and no default values, in Typescript. this is documented in https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/blob/master/README.md#context
// create context with no upfront defaultValue
// without having to do undefined check all the time
function createCtx<A>() {
const ctx = React.createContext<A | undefined>(undefined)
function useCtx() {
const c = React.useContext(ctx)
if (!c) throw new Error("useCtx must be inside a Provider with a value")
return c
}
return [useCtx, ctx.Provider] as const